PowerShell计算机启动脚本-切换用户上下文?

时间:2019-04-20 08:05:14

标签: powershell

我确实通过Microsoft组策略定义了在计算机启动时运行Powershell脚本。另外,我还要求在不保存凭据的情况下按计划任务运行Powershell脚本。 在这两种情况下,我都有相同的问题...

我想运行Citrix Powershell-Command(PSSnapIn),如:

Set-BrokerMachine -MachineName "domain.local\$env:COMPUTERNAME" -AdminAddress "RemoteServer.domain.local" -InMaintenanceMode $True

手册: https://citrix.github.io/delivery-controller-sdk/Broker/Set-BrokerMachine/

当然,只有拥有权限的用户才能运行这些Citrix命令。我可以授予域用户运行命令“ Set-BrokerMachine”的权限,但是在上述方案中,PowerShell脚本在 system-user 的上下文中运行。

我确实通过PSExec模拟了系统用户: Error running as System-User

我的脚本当然会做其他事情,我想让它们以系统用户身份运行,但是现在我正在寻找一种干净的解决方案来使那些Citrix命令运行。

如果可能的话,我不想在脚本中保存凭据。

编辑#1:

我将能够解决以下代码:

$Username = "MySpecialUser"
$Password = 'MyPassword'

$SecurePassword = ConvertTo-SecureString $Password -AsPlainText -Force
$Credential = New-Object System.Management.Automation.PSCredential $Username, $SecurePassword

$Result = Invoke-Command -Session ( New-PSSession -ComputerName "RemoteServer.domain.local" -Credential $Credential ) -ScriptBlock {  

     Add-PSSnapin Citrix*
     Set-BrokerMachine -MachineName "domain.local\$args" -InMaintenanceMode $True

} -ArgumentList $env:COMPUTERNAME -HideComputerName

Remove-PSSession -InstanceId $Result.RunspaceId

我不喜欢这样,因为:

  • 代码必须包含凭据(ofc,我可以对其进行加密...)
  • 我必须在Citrix中为此特殊用户创建权限系统
  • 我必须将特殊用户放在每台服务器上的本地组中,以允许远程管理(存在安全风险)
  • 我不喜欢使用PSSession
  • ...

是否有更好/更清洁的解决方案?有什么想法吗?

0 个答案:

没有答案