1

我试图在 Windows 2008 服务器上查找不是“C、E、L、S、T、W”的每个驱动器号。谁能告诉我我的逻辑错误或我该怎么做?

[char[]]”CELSTW” | Where-Object {!(Get-PSDrive $_ )} 
4

4 回答 4

6

您从不需要的驱动器号列表 (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"}
于 2012-05-11T21:47:57.217 回答
1

这应该为您提供名称(驱动器号)不是“C、E、L、S、T、W”的所有 psdrive

Get-PSDrive  | ?{[char[]]"CELSTW" -notcontains $_.name}

但是,如果您想排除非文件系统 psdrive,请尝试以下操作:

Get-PSDrive  | ?{[char[]]"CELSTW" -notcontains $_.name} | ?{$_.Provider.name -eq "FileSystem"}
于 2012-05-11T21:45:13.503 回答
0

你必须从另一端开始:

$drives = [char[]]"CD"
Get-PSDrive | ? { $drives -notcontains $_.Name}
于 2012-05-11T21:44:52.557 回答
0

Another example using the -notmatch operator:

Get-PSDrive | Where-Object { $_.Name -notmatch '[CELSTW]'}
于 2012-05-12T09:07:30.437 回答