我试图在Powershell中创建一个脚本,将消息框发送到远程PC列表。但我在本地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
}

最佳答案

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
    }

}

关于powershell - 将消息框发送到远程PC列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29014944/

10-11 07:48