$Computers = Get-Content "C:\TEMP\MSGLOG\COPY.txt"
ForEach ($computer in $computers)
{
Invoke-Command -ComputerName $computer -ScriptBlock {
Copy-Item "C:\\Program Files (x86)\\DST\\messaging*.log" -Destination "MYMACHINE\temp\MSGLOG\$Computer\"
}
}
所以我正在尝试将其从~400计算机复制日志到我的机器上。每台计算机都使用这些日志的日期命名格式,所以我想将这些文件复制到一个以它们来自哪台计算机命名的文件夹中,但经过多次尝试后,我无法弄清楚这一点。
答案 0 :(得分:1)
在这种情况下,我认为不需要Invoke-Command
。您应该可以从\\hostname\C$\.
Ex(未经测试):
$Computers = Get-Content "C:\TEMP\MSGLOG\COPY.txt"
$MyMachine = "myMachine"
foreach($Computer in $Computers)
{
Copy-Item -Path "\\$Computer\C$\Program Files (x86)\DST\" -Include "messaging*.log" -Destination "\\$MyMachine\temp\MSGLOG\$Computer\" -Verbose -WhatIf
}
如果这样可以为您提供所需的结果,只需删除-whatif
然后再次运行。
注意:您的示例显示目标是共享。从MyMachine
的名称我会认为这是本地的。如果是这样,请将-Destination
更改为本地路径(只是为了避免不必要的减速)。此外,还包括-verbose
,以便在Copy-Item
流程
答案 1 :(得分:1)
file extension
在本地计算机上定义,但scriptblock在远程计算机上运行。当远程计算机尝试使用$computer
时,它会获得一个空字符串。
您需要$computer
表单,该表单会将值带入scriptblock并转到远程计算机:
$using:computer
或者您需要一个远程计算机已经存在的变量,例如$Computers = Get-Content "C:\TEMP\MSGLOG\COPY.txt"
ForEach ($computer in $computers)
{
Invoke-Command -ComputerName $computer -ScriptBlock {
Copy-Item "C:\Program Files (x86)\DST\messaging*.log" -Destination "\\MYMACHINE\temp\MSGLOG\$using:Computer\"
}
}
。
答案 2 :(得分:0)
如果您在主机和遥控器上使用PowerShell 5.1,则可以将Copy-Item
与FromSession
或ToSession
参数一起使用。 microsoft的示例:
$Session = New-PSSession -ComputerName "Server01" -Credential "Contoso\PattiFul"
Copy-Item "C:\MyRemoteData\test.log" -Destination "D:\MyLocalData\" -FromSession $Session