我想在powershell上用保存的凭据运行一个命令,我有以下脚本
$user = "test"
$passwd = ConvertTo-SecureString -String "ExtremelyStrongPassword" -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential -ArgumentList $user, $passwd
Copy-Item -Path "C:Temp*" "C:Program FilesTest" -Credentials $cred
用户没有管理员权限,但在localhost中,我们有一个具有管理员权限的用户来运行这些进程。
返回的错误是";访问被拒绝";
如何传递这些参数以运行具有高程的命令?
永远不要在脚本中传递纯文本凭据。使用Get-Credential cmdlet收集并使用它们。即使这样做,用户也会被提示输入密码。
- 这就是启动进程的-RunAs开关的作用
- 或者将脚本设置为自动提升
- 或者使用cmdlet的凭据开关
- 或者使用具有所需信誉的计划任务,并让用户运行它
- 使用脚本顶部的Requires语句
- 将需要的凭据存储在Windows凭据存储中并调用它们从那里
about_Requires-PowerShell | Microsoft Docs
简短描述防止脚本在没有所需的元素。
#Requires -RunAsAdministrator
启动进程
示例5:以管理员身份启动PowerShell此示例启动PowerShell,方法是使用"以管理员身份运行"选项。
Start-Process -FilePath "powershell" -Verb RunAs
使用您现有的方式:
Copy-Item -Path 'C:Temp*' 'C:Program FilesTest' -Credentials (Get-Credential -Credential 'DomainUserName')
除了计划任务方法外,每个方法都会提示用户输入密码,这听起来像是你想要避免的。因此,考虑以下内容:
从PowerShell 访问Windows凭据管理器
此简单的PowerShell类可用于使用凭据Windows中的管理器和密码保管库:检查帐户信息存在于vault中,将凭据保存到vault并读取存储的vault中的登录和密码信息。
https://gallery.technet.microsoft.com/scriptcenter/Accessing-Windows-7210ae91
使用注册表存储凭据:
将加密密码保存到PowerShell 的注册表