所以,为了简单,我试图通过多个客户端上的共享文件夹复制用户配置文件,它工作得很好,但我似乎无法使日志文件与它一起工作
事实上,我期望$?总是最终给我True每个命令(除非它有点崩溃在复制中间),因为它正确地复制我想要的每个文件夹,但它不是…它只给了我一次True,然后就都是false了,即使它所有的操作都是正确的
Foreach ($User in $Users){
Foreach ($TargetDirectory in $Directories){
$TestPath = Test-Path -Path "\$ClientUsers$User"
If ($TestPath -eq $True) {
Robocopy "\$ClientUsers$User$TargetDirectory" "C:SAV$Client$User$TargetDirectory" /E /MIR
$Date = get-date -f yyyy-MM-dd
$Path = "C:Logs($Date)Sauvegarde_Profils_$Client.txt"
New-Item -Path $Path -Force
$Result = "Copie du dossier $TargetDirectory, appartenant à $User = $? dans $Client"
Add-Content -Path $Path $Result
}
}
}
}
下面是日志文件的一个示例(法语,但它只是为了显示它几乎按预期工作):
复制档案文件,显然是公司文件。alain = True pour CLIENT-1
复制文件桌面,显然是固定的。alain = False pour CLIENT-1
…(该点之后为False)
查看$?
和$LASTEXITCODE
的区别,官方文档在about_Automatic_Variables中。看看$?
的描述,因为范围可能很重要。
在您的示例中,$?
将包含New-Item
的结果。然而,这应该成功,因为您已经提供了-Force
开关。当然,您可以选择只运行一次。如果这是一个长时间运行的脚本,这样做可能会稍微改变行为。因为您将只设置初始日期,而不是每个目录。因此,如果您今天碰巧复制目录A,明天复制目录B,它们将使用相同的日志文件。按照你现在的设计,它们应该是分开的。
在您当前的设计中,您的日志文件路径为同一用户的每个目录设置,但您的日志文件只引用该用户。所以你可以把支票往上拉。您应该考虑何时使用$LASTEXITCODE
。您可能还需要包含对$TargetDirectory
的检查。
Foreach ($User in $Users){
$date = get-date -f yyyy-MM-dd
$logfile = "C:Logs($Date)Sauvegarde_Profils_$Client.txt"
$path = "\$ClientUsers$User"
if( (Test-Path -Path $logfile) -eq $false){
New-Item -Path $logfile
}
if( (Test-Path -Path $path) -eq $false){
Write-Error "Path for $user on $client does not exist."
continue
}
Foreach ($TargetDirectory in $Directories){
Robocopy "\$ClientUsers$User$TargetDirectory" "C:SAV$Client$User$TargetDirectory" /E /MIR
$Result = "Copie du dossier $TargetDirectory, appartenant à $User = $? dans $Client"
Add-Content -Path $Path $Result
}
}