无法使我的日志文件适用于我的用户配置文件脚本



所以,为了简单,我试图通过多个客户端上的共享文件夹复制用户配置文件,它工作得很好,但我似乎无法使日志文件与它一起工作

事实上,我期望$?总是最终给我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
}
}

相关内容

  • 没有找到相关文章