使用变量后 PowerShell 命令失败

问题描述 投票:0回答:2

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

#$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
    赋值后此命令会失败?
windows powershell scripting user-profile
2个回答
2
投票

gms0ulman 的有用答案很好地回答了问题 #1(将

$null
转换为
[int]
会产生
0
)。

至于问题#2:

至少在非域计算机上的 Windows 11 上:

  • 对于当前登录的帐户(可能包括服务帐户),
    .LastUseTime
    属性似乎总是返回当前日期和时间
  • 除非您运行命令withlevation(以管理员身份),否则您可能会看到其他用户帐户的无值
您可以尝试检查

.LastDownloadTime

if该字段在您的情况下有一个值 - 我认为只有当配置文件是漫游配置文件时它才会有值。


作为参考,以下是可用时间戳的完整列表:


LastAttemptedProfileDownloadTime

LastAttemptedProfileUploadTime
LastBackgroundRegistryUploadTime
LastDownloadTime
LastUploadTime
LastUseTime


一般来说,如何

优化问题中的代码

  • PowerShell 字符串运算符默认不区分大小写,因此不需要

    .toUpper()

  • 您可以将多个

    Where-Object

     调用合并为一个调用,然后您可以使用 

    -notin
     与 RHS 上的路径数组一起使用,而不是使用 
    -ne
     与各个路径。

将所有内容放在一起(PSv3+;请记住,与

.LastUsedTime

 进行比较可能毫无意义):

#requires -RunAsAdministrator $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' }
    

1
投票
  1. 是的,它是空的,增加了零天。这很好 - 你可以测试:

    $(Get-Date).Date.AddDays($null)
    
    
  2. 您确定有与该数据匹配的配置文件吗?当

    $numberOfDays

    null
    时查看数据进行确认。

© www.soinside.com 2019 - 2024. All rights reserved.