$ Env变量在if块内无法识别

时间:2018-10-12 18:07:30

标签: powershell

我正在尝试执行此代码,该代码基本上是将文件从网络上复制到本地登录用户的桌面(如果该文件早于网络上的文件)。以下代码的第一行工作正常,但是在if块中使用$env:userprofile的部分会引发错误。不知道这是怎么回事。

Copy-Item -Path "\\path1\subpath1\subpath2\Patch\help\*" -Filter *.chm -Destination "$Env:UserProfile\Desktop" -force -Recurse

$chmfileNetwork = Get-ItemPropertyvalue -Path 'path1\subpath1\subpath2\Patch\help\*' -Filter *.chm -Name 'LastWriteTime'

$chmfileLocal = Get-ItemPropertyValue -Path '$Env:UserProfile\Desktop\*' -Filter *.chm -Name 'LastWriteTime'

if ($chmfileLocal -lt $chmfileNetwork) {
    Copy-Item -Path "path1\subpath1\subpath2\Patch\help\*" -Destination "$Env:UserProfile\Desktop" -force -Recurse
} else {
    echo "Saul good, man"
}

抛出错误

Get-ItemPropertyValue : Cannot find drive. A drive with the name '$Env'
does not exist.
At C:\Users\user1\Downloads\PS2EXE-GUI\psfile.ps1:28 char:17
+ ... fileLocal = Get-ItemPropertyValue -Path '$Env:UserProfile\Desktop\*'  ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: ($Env:String) [Get-ItemPropertyValue], DriveNotFoundException
    + FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.GetItemPropertyValueCommand

1 个答案:

答案 0 :(得分:5)

您可以使用$home\Desktop来获取用户的桌面文件夹,但是Ansgar Wiechers确实指出了脚本引发错误的原因。您在chmfileLocal =行上使用了单引号。当您使用单引号时,变量不会展开,仅当您使用双引号时。原始脚本可能已通过以下更改得到修复:

$chmfileLocal = Get-ItemPropertyValue -Path "$Env:UserProfile\Desktop\*" -Filter *.chm -Name 'LastWriteTime'