我有一个确定用户ID的脚本,一旦我拥有该用户ID,我想使用不同的凭据针对该用户ID运行脚本块。这可能吗?谁能告诉我这方面的例子?我很感激。 提前致谢。 : - )
答案 0 :(得分:9)
我得到了它,感谢Trevor Sullivan指出我正确的方向。我最后只是将我的第二个ps1文件放入一个scriptblock,并将其作为一个作业运行,然后从主脚本中传递参数,就像这样
$job = Start-Job -scriptblock {
param ($username)
some code to run against the variable that was passed in
} -Args $target -credential $Cred
$ target是我要传递给我的scriptblock的变量。 $ username是scriptblock接受的参数,谢谢。
答案 1 :(得分:3)
我知道很久以前就已经回答了这个问题,但是我想为那些无需返回数据即可返回数据的用户添加另一个选择。
我们可以创建一个帮助脚本,该脚本创建一个pscredential,然后使用它来启动本地PSSession,以在其他用户的上下文中运行脚本或脚本块。您需要从某个地方获取用户密码,最好以安全字符串形式输入或从Key Vault中获取用户密码,但是对于本示例,我们的帮助程序脚本会将其作为字符串参数。
脚本内容:
param ([string]$username,[string]$password)
$Username = 'username@domain.com'
$Password = ConvertTo-SecureString -String $password -AsPlainText -Force
$Credential = New-Object -Type PSCredential($Username,$Password)
$Session = New-PSSession -Credential $Credential
Invoke-Command -Session $Session -FilePath C:\Path\to\some\script.ps1
如果您要运行的代码很简单,或者已将脚本转换为脚本块,则也可以使用-ScriptBlock
代替-FilePath
。
希望这可以帮助某人!
答案 2 :(得分:0)
会话初始化时建立会话的安全上下文。您不能在会话中的不同上下文中任意运行命令。要在不同的安全上下文(凭据集)下运行,您需要在这些凭据下初始化新会话并在那里运行它。
如果您查看Invoke-Command
的帮助,您会注意到-Credential
参数仅在通过computername,uri或session指定远程会话的参数集中有效。您还可以将-credential
与Start-Job
一起使用,这将在本地计算机上的新会话中运行该命令。
答案 3 :(得分:0)
此代码将使用提供的凭据在管理员模式下启动PowerShell,然后在脚本块中运行该代码。可能还有其他方法,但这对我有用。
$account= # AD account
$password = # AD user password
$passwordSecure = ConvertTo-SecureString ($password) -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential ($account, $passwordSecure)
$ScriptBlock = {
whoami
start-sleep 3
}
# Run PowerShell as Administrator with Custom Crednetails
start-Process powershell.exe -Credential $Cred -ArgumentList "-Command Start-Process powershell.exe -Verb Runas -ArgumentList '-Command $ScriptBlock'" -Wait