我正在使用PromptForChoice在另一台服务器上输入PSSession。然后将执行关闭com应用程序的代码。
#enters interactive remote session
$Prompt = "Click yes to enter interactive session"
$Choices = [System.Management.Automation.Host.ChoiceDescription[]] @("&Yes", "&No", "&Cancel")
$Default = 1
# Prompt for the choice
$Choice = $host.UI.PromptForChoice($Title, $Prompt, $Choices, $Default)
# Action based on the choice
switch($Choice)
{
0 {Enter-PSSession ServerABC}
1 { Write-Host "No"}
2 { Write-Host "Cancel"}
}
#shutsdown COM
$sb = {
$admin = New-Object -ComObject "COMAdmin.COMAdminCatalog"
$appCollection = $admin.GetCollection("Applications")
$appCollection.Populate()
$appCollection | ForEach-Object {
Write-Host "shutdown" $_.Name; $admin.ShutdownApplication($_.Name) }
}
Invoke-Command -ScriptBlock $sb
我面临的问题是它实际上不会进入会话。当我单独运行第一部分时,它进入会话。但是当我作为一个整体运行它时,它不会进入会话,即使当我说是的时候。
如何纠正此问题?
1条答案
按热度按时间q5lcpyga1#
不要进入会话。这是不起作用的-这是一个交互式命令,您实际上离开了脚本范围,最好的脚本将在退出会话后继续运行。
使用
New-PsSession
创建一个PsSession,然后使用-Session
参数传递给invoke-command
。