1

我正在尝试在多台远程 Windows 机器上写入文件并删除文件。如果机器不可用,即。不在线我想在错误日志中捕获它,以便我有一个有问题的机器名称列表发送给帮助台。它可能很难看,但我已经接近了一些有用的东西。任何澄清将不胜感激。

$from="D:\whatever\machinfo"
$to="\\$machine\c\\scripts\"
output_file="D:\whatever\reports\$machine_writeerror.txt"

foreach($machine in(gc d:\whatever\machinfo\testworkstations.txt))
    {
    $machine
    IF (!$to) 
    {
    Copy-Item D:\whatever\machinfo\010RunGetmachinfo.bat \\$machine    \c\scripts -verbose
    # $errormsg="destination not found"
    $machine > output_file
    }
    ELSE
    {
    # DO NOTHING
    Remove-Item \\$machine\c\scripts\000dontrun.bat
    }
    }  

好的,我已经重写了这个,但我没有做对。我想要一个唯一的错误文件,其中包含每个机器连接失败的单个文件或一个包含所有无法连接到的机器的计算机名的文件。我认为以下内容很接近(但不正确)。

$logfile="D:\Projects\StoreControls\machinfo\reports\"+$machine+"_writeerror.txt"

foreach($machine in(gc d:\projects\StoreControls\machinfo\testworkstations.txt))
   {
   $machine
   If ( (Test-Connection -Computername $machine -Quiet -Count 1) -eq "False"){
   $machine > $logfile}
   Else{
   Remove-Item \\$machine\c\scripts\tasks\000dontStart.bat
   Copy-Item D:\Projects\StoreControls\machinfo\010RunPCsNServersGetmachinfo.bat \\$machine\c\scripts\tasks\ 
   }
   }

阅读更多关于 Test-Connection 的内容后,将“False”更改为 $False。作品!谢谢!

4

1 回答 1

2

您可以通过测试自动变量来测试命令的正确执行 $?

所以你可以使用类似的东西

Copy-Item D:\whatever\machinfo\010RunGetmachinfo.bat \\$machine\c\scripts 
if($? -eq $false){
    # copy has failed
    "Copy error on $machine" |out-file d:\whatever\reports\$machine_writeerror.txt

}

顺便说一句,更有效的方法可能是 ping 主机并查看它是否还活着:

if ( (Test-Connection -ComputerName $machine -Quiet  -Count 1) -eq  $false){
    #host not available

}
于 2014-05-06T16:31:26.997 回答