将消息框发送到远程PC列表

时间:2015-03-12 16:15:50

标签: powershell

我正在尝试在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
}

4 个答案:

答案 0 :(得分:5)

mjolinor是对的。 Invoke-Command对于你想要做的事情会更好。您可以使用现有的内容,只需为每个调用调用构建脚本块。 (我使用'*'代替msg参数中的特定用户将其发送给所有用户。) 编辑:我刚刚意识到当前的用户名变量可能会捕获用户调用此命令。将需要另一种获取当前用户的方法。也许通过AD或GWMI。

$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”之前删除一个`,如下图所示 我希望它可以帮助一些人。

msgbox and script

答案 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