我正在尝试在powershell中创建一个脚本,将消息框发送到远程PC列表。但是我在本地电脑上收到了所有消息。
谁能告诉我哪里出错了?
$PCLIST = Get-Content 'C:\TEST\PCLIST.TXT'
ForEach ($computer in $PCLIST) {
Enter-PSSession -ComputerName $computer
$GetUserName = [Environment]::UserName
#$CmdMessage has to be one line
$CmdMessage = {C:\windows\system32\msg.exe $GetUserName 'Hello' $GetUserName 'This is a test!'}
Invoke-Command -Scriptblock $CmdMessage
}
答案 0 :(得分:5)
$PCLIST = Get-Content 'C:\TEST\PCLIST.TXT'
ForEach ($computer in $PCLIST) {
Invoke-Command -ComputerName $computer -Scriptblock {
$GetUserName = [Environment]::UserName
$CmdMessage = {C:\windows\system32\msg.exe * 'Hello' $GetUserName 'This is a test!'}
$CmdMessage | Invoke-Expression
}
}
答案 1 :(得分:0)
您无法使用Enter-PSSession
进行脚本编写。它只能以交互方式使用。
如果在脚本中使用它,则以下所有命令仍将在本地会话中执行。要在脚本中的远程会话中执行命令,您必须使用Invoke-Command
。
话虽如此,我认为这无论如何都不会起作用。它不会在远程计算机的登录用户的上下文中执行,并且该远程会话中没有用于显示消息框的UI。
答案 2 :(得分:0)
对我来说,我不得不调整脚本。制作一个更好的线条之间有间隔的盒子。我需要更新的只是我的.ps1和pclist.txt
$ servers =获取内容-路径C:\ vm \ pclist.txt
$ msg =(“ * Rappel * n
第n-1行。n-2nd line.
n n3rd line,
第n4行。”)
ForEach($ server中的$ server)
{Invoke-WmiMethod -Class win32_process -ComputerName $ server -Name create -ArgumentList“ c:\ windows \ system32 \ msg.exe * $ msg”}
您需要在每个“ n”之前删除一个`,如下图所示 我希望它可以帮助一些人。
答案 3 :(得分:-1)
$name = read-host "Enter computer name "
$msg = read-host "Enter your message "
Invoke-WmiMethod -Path Win32_Process -Name Create -ArgumentList "msg * $msg" -ComputerName $name
EZ GAME EZ LIFE