我试图在 Windows 2008 服务器上查找不是“C、E、L、S、T、W”的每个驱动器号。谁能告诉我我的逻辑错误或我该怎么做?
[char[]]”CELSTW” | Where-Object {!(Get-PSDrive $_ )}
我试图在 Windows 2008 服务器上查找不是“C、E、L、S、T、W”的每个驱动器号。谁能告诉我我的逻辑错误或我该怎么做?
[char[]]”CELSTW” | Where-Object {!(Get-PSDrive $_ )}
您从不需要的驱动器号列表 (CELSTW) 开始,并将不存在的驱动器号作为 psdrive 输出。
你想要的是从所有 PSDrives 的列表开始,然后在它们与你不想要的匹配的地方过滤掉它们:
Get-PSDrive | Where-Object { [char[]]"CELSTW" -notcontains $_.Name }
尽管这将为您提供许多其他 PSDrive 类型。您可能还想为 FileSystem 提供程序过滤它:
Get-PSDrive | Where-Object { [char[]]"CELSTW" -notcontains $_.Name -AND $_.Provider.Name -eq "FileSystem"}
这应该为您提供名称(驱动器号)不是“C、E、L、S、T、W”的所有 psdrive
Get-PSDrive | ?{[char[]]"CELSTW" -notcontains $_.name}
但是,如果您想排除非文件系统 psdrive,请尝试以下操作:
Get-PSDrive | ?{[char[]]"CELSTW" -notcontains $_.name} | ?{$_.Provider.name -eq "FileSystem"}
你必须从另一端开始:
$drives = [char[]]"CD"
Get-PSDrive | ? { $drives -notcontains $_.Name}
Another example using the -notmatch operator:
Get-PSDrive | Where-Object { $_.Name -notmatch '[CELSTW]'}