Powershell v4 脚本不会作为 exe(通过 PS2EXE)触发以重置会话



我试图写一个简单的脚本,允许员工在机器上重置Citrix会话,他们不是本地管理员。下面的代码可以完美地作为。ps1文件运行。但它不会重置会话时转换为。exe与PS2EXE,并运行。

使用。exe背后的想法是我可以模糊它需要运行命令的服务帐户的密码(它是Citrix服务器上的本地管理员)。是的,我意识到了风险,而且。ps1可以相当容易地从。exe中提取出来。我相信我们可以在GP中做到这一点,但我想用这种方法来做。

那么,为什么下面的命令在以.exe运行时不重置会话呢?(我已经尝试硬编码的值为服务器和会话,所以我认为这可能是一个凭据问题,而不是一个变量或ScriptBlock问题。)

$strScriptUser = "DOMAIN/svcacct"
$strPass = "password"
$PSS = ConvertTo-SecureString $strPass -AsPlainText -Force
$cred = new-object system.management.automation.PSCredential
$strScriptUser,$PSS
$server = Read-Host 'Which Citrix server?'
$sid = Read-Host 'What session number to reset? (be very careful!)'
Start-Job -ScriptBlock {
reset session $using:sid /server $using:server > /temp2/result.txt
} -Credential $cred 

感谢对原始问题的评论,我能够得到这个工作。我认为问题在于它过早地退出了,在重置完成之前。使用Start-JobWait-Job似乎可以解决这个问题。

这是最终的工作版本。我添加了一个会话列表和一些导航。我相信还有更优雅的方法,但这对我来说是有效的。如果有什么罪过太过分而无法忽视,请告诉我。

$strPass = "password"
$PSS = ConvertTo-SecureString $strPass -AsPlainText -Force
$credential = new-object -typename System.Management.Automation.PSCredential `
-argumentlist "domainsvcacct",$PSS
$sid=0
Write-Host "***Session Destroyer(!) v1***"
while ($sid -eq "0" -Or $sid -eq "n" -Or $sid -eq "N") {
$server = Read-Host 'Which Citrix server? (or q to quit)'
if ($server -eq "q" -Or $server -eq "Q") {exit}
query session /server $server
$sid = Read-Host 'What session number to reset? Be very careful! `
(or q quits, n for new server)'
if ($sid -eq "q" -Or $sid -eq "Q") {exit}
 }
    $job = Start-Job -credential $credential –scriptblock {
    reset session $using:sid /server $using:server
 }
Wait-Job $job
Write-Host "Done. Check below to make sure."
query session /server $server
pause

最新更新