【问题标题】:Windows cmd.exe output in PowerShellPowerShell 中的 Windows cmd.exe 输出
【发布时间】:2023-03-20 04:59:01
【问题描述】:

我有一个用于在其他机器上远程执行命令的脚本,但是......当使用 windows cmd.exe 命令时,它不会写入远程服务器上的文件。这是代码。

$server = 'serverName'  
$Username = 'userName'  
$Password = 'passWord'  
$cmd = "cmd /c ipconfig"  

########################  

########################  

$ph = "C:\mPcO.txt"  
$rph = "\\$server\C$\mPcO.txt"  

$cmde = "$cmd > $ph"  
$pass = ConvertTo-SecureString -AsPlainText $Password -Force  
$mycred = new-object -typename System.Management.Automation.PSCredential -argumentlist  "$Username",$pass  
Invoke-WmiMethod win32_process -name create -ComputerName $server -ArgumentList $cmde  Credential $mycred  
cmd /c net use \\$server\C$ $password /USER:$username  
Get-Content $rph  
Remove-Item $rph  
cmd /c net use \\$server\C$ /delete  

如你所见,我们只写了

$cmde = "$cmd > $ph"  

如果我使用 PowerShell 命令,我会使用

$cmde = "$cmd | Out-File $ph"  

而且效果很好。任何建议表示赞赏

【问题讨论】:

    标签: powershell cmd


    【解决方案1】:

    你为什么要这么辛苦?您可以使用 WMI 获取远程计算机的 IP 详细信息。

    Get-WMIObject -ComputerName "RemoteServer" Win32_NetworkAdapterConfiguration -Filter "IPEnabled=$true" | Out-File $env:TEMP\ipdetails.txt
    

    现在,一旦您拥有该文件,您就可以使用脚本中的命令移动它。

    【讨论】:

    • 我不担心IP,这只是我为非powershell命令提供的示例。
    • 嗯,应该已经很清楚了。无论如何,除了Invoke-WMIMethod 行中缺少的“-”之外,该脚本对我来说很好。 -Credential 缺少“-”。除此之外,该脚本能够使用 ($cmd > $ph) 在远程计算机上创建一个文件,并且我能够使用 Get-Content $rph 读取它。
    • 顺便说一句,您不必将网络驱动器映射到远程计算机。 Get-Item 支持 UNC 路径。
    • 就此而言,OP 不需要cmd /c 上的cmd /c net use ...net use ... 在 PowerShell 中运行良好。
    • 谢谢大家,另外,奇怪的是,这确实适用于从 XP 到 win7 执行的一种设置,但是当从 win7 机器执行回到 XP 时,它不会。它也不能从 7 到 2k3 工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-30
    • 1970-01-01
    • 2016-10-16
    相关资源
    最近更新 更多