漫长的一天,可能会遗漏一些明显的东西,但下面嵌套的IF语句应该有效。有什么建议吗?
基本上,我想做的是:
我做了以下事情:
$Computer = "hostName"
Enter-PSSession -ComputerName $($Computer)
$LogFileName = "program_" + $Computer + ".log"
$LogFilePath = "\\$Computer\C$\users\$env:USERNAME\desktop\$LogFileName"
$DestPath = "\\$Computer\C$\users\$env:USERNAME\ProgramTest\"
$LogCopy = "programCopy_" + $Computer + ".log"
IF(Test-Path $($DestPath)){
If(Test-Path "$DestPath\$LogCopy"){
Remove-Item "$DestPath\$LogCopy"
Copy-Item $($LogFilePath) $($DestPath)
}
Else{
Copy-Item $($LogFilePath) $($DestPath)
}
ELSE{
New-Item -ItemType directory -Path $($DestPath)
Copy-Item $($LogFilePath) $($DestPath)
}
}
答案 0 :(得分:4)
我看到你已经接受了答案,但我想提供和改进逻辑。嵌套的if虽然可以正常工作但却有一些冗余。假设我理解你的意图......
# If the folder does not exist create it. If it does move on
If(!(Test-Path $DestPath)){New-Item -ItemType directory -Path $DestPath}
# If the log file already exists. Remove It.
If(Test-Path "$DestPath\$LogCopy"){Remove-Item "$DestPath\$LogCopy"}
# Regardless of what happens we are going to copy the file. No need to repeat the code.
Copy-Item $($LogFilePath) $($DestPath)
虽然这是对逻辑的改进,但我们可以更进一步。如果你想确保文件是新的并且被覆盖Copy-Item
将为你处理。
# If the folder does not exist create it. If it does move on
If(!(Test-Path $DestPath)){New-Item -ItemType directory -Path $DestPath}
# Regardless of what happens we are going to copy the file. No need to repeat the code.
Copy-Item $LogFilePath $DestPath -Confirm:$false -Force
$()
是子表达式的表示法。类似上下文中的常见用法是确保变量在字符串中正确扩展。如以下示例所示
PS C:\Users\Cameron> $data = @{Matt="Awesome"}
PS C:\Users\Cameron> "$data.Matt"
System.Collections.Hashtable.Matt
PS C:\Users\Cameron> "$($data.Matt)"
Awesome
目前在您的代码中,虽然没有造成任何伤害,但它是多余的。
答案 1 :(得分:0)
除了$($Variable)
的可疑使用(完全冗余;只是使用$Variable
)之外,你错放了一个右大括号。最后五行应如下所示:
}
ELSE{
New-Item -ItemType directory -Path $($DestPath)
Copy-Item $($LogFilePath) $($DestPath)
}
如果这不起作用,请告诉我们实际发生了什么:错误等等,当您尝试运行它时。