windows - 使用变量后 PowerShell 命令失败

标签 windows powershell scripting user-profile

我正在尝试运行一个命令来收集具有特定要求的使用配置文件,这是我的代码:

#$numberOfDays = 30
#$numberOfDays

$profileStructsToRemove = Get-CimInstance Win32_UserProfile | 
    Where-Object {$_.LastUseTime -lt $(Get-Date).Date.AddDays(-$numberOfDays) } |
    Where-Object {$_.LocalPath.ToUpper() -ne 'C:\USERS\ADMINISTRATOR'} |
    Where-Object {$_.LocalPath.ToUpper() -ne 'C:\USERS\SOME_PROFILE_TO_KEEP'} |
    Where-Object {$_.LocalPath.ToUpper() -ne 'C:\USERS\PUBLIC'}

$profileStructsToRemove #print

我使用 $numberOfDays 变量来确定我想用作过滤器的从今天减去的天数。现在它被注释掉了,命令成功了,尽管因为 $numberOfDays 没有定义我假设它使用的是空值?我不太确定,但它是这样工作的......

但是,当我将 $numberOfDays 分配给 30 时,它根本无法用任何东西填充变量 $profileStructsToRemove。它完全失败了。我真的可以使用一些输入来解释为什么会这样。

  1. 未定义 $numberOfDays 时命令如何工作?对于 AddDays 函数,它只是一个空值,还是将其视为 0?
  2. 为什么在为 $numberOfDays 赋值后此命令失败?

最佳答案

gms0ulman's helpful answer很好地回答了问题 #1(将 $null 转换为 [int] 会产生 0)。

关于问题 #2:

至少在非域计算机上的 Windows 10 上,.LastUseTime 属性似乎总是​​返回当前日期和时间,这(a) 让它变得毫无用处,并且 (b) 解释为什么你没有看到任何结果。

您可以尝试检查 .LastDownloadTimeif 该字段在您的情况下有值 - 我认为只有在配置文件为 < em>漫游 配置文件。


作为引用,这里是可用时间戳的完整列表:
LastAttemptedProfileDownloadTimeLastAttemptedProfileUploadTimeLastBackgroundRegistryUploadTimeLastDownloadTimeLastUploadTimeLastUseTime.


关于一般如何优化问题中的代码:

  • 默认情况下,PowerShell 字符串运算符不区分大小写,因此不需要 .toUpper()

  • 您可以将多个 Where-Object 调用合并为一个调用,并且可以使用
    -notin 使用 RHS 上的一组路径,而不是使用 -ne 和单个路径。

将它们放在一起(PSv3+;请记住,与 .LastUsedTime 进行比较可能毫无意义):

$profileStructsToRemove = Get-CimInstance win32_userprofile | Where-Object {
    $_.LastUseTime -lt $(Get-Date).Date.AddDays(-$numberOfDays) -and
      $_.LocalPath -notin 'C:\USERS\ADMINISTRATOR',
                          'C:\USERS\SOME_PROFILE_TO_KEEP',
                          'C:\USERS\PUBLIC'
}

关于windows - 使用变量后 PowerShell 命令失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52632465/

相关文章:

java - 从批处理文件中终止从 Java 启动的进程

powershell - 如何签署文件夹下的所有msi文件?

powershell - 如何将 Powershell 变量值传递到 cmd 提示符

python - 在 Pyramid 框架内运行脚本(即没有服务器)

bash - 在 bash 脚本中使用调试程序分离 tmux session

java - GCC 路径长度问题

python - Windows 8 上的 scipy.optimize dll 加载失败

linux - Jenkins 部署到 Windows

windows - 带有小时和分钟的 robocopy MAXAGE/MINAGE 值

linux - "awk"未按预期处理 shell 变量