- 不像$数组不起作用

时间:2018-02-16 14:46:22

标签: powershell

我想删除除了一些我想要保留的用户

然而,似乎将notlike与数组一起使用并不起作用,除非它有一个条目?

使用“删除项目”和“项目名称”不是有效的解决方法。 我想我需要制作一个循环来检查Udirs中每个Dir的管道。

我知道如何用英语说话而不是用PowerShell说话。

我不知道该怎么做。

$computer = (Read-Host "Enter Computer name")
$UDirs = @()
do {
  $input = (Read-Host "Enter Username")
  if ($input -ne '') {$UDirs +=  "\\$computer\c$\Users\$input*"}
}
until ($input -eq '')

$UDirs

Get-ChildItem -Path  "\\$computer\c$\Users\" -Recurse |
    Select -ExpandProperty FullName |
    Where {$_ -notlike 'C:\Users\ntanghe'} |
    Where {$_ -notlike "$UDirs"} |
    sort length -Descending #|
    #Remove-Item -force 

2 个答案:

答案 0 :(得分:2)

因此-like-notlike运算符可以处理模式匹配,例如

"gvee" -like    "*ve*" # Returns True
"gvee" -like    "*je*" # Returns False
"gvee" -notlike "*ve*" # Returns False
"gvee" -notlike "*je*" # Returns True

比较器适用于字符串array不是string,而是string s(微妙差异)的集合。

假设您正在尝试获取文件夹名称不在字符串列表中的用户文件夹列表;你实际上不需要使用-like(因为你没有模式匹配)。

相反,您应该是-in / -notin运营商!

$usersToKeep = "gvee", "Public", "etc"

Get-ChildItem -Path "C:\Users" |
    Where-Object Name -NotIn $usersToKeep

答案 1 :(得分:0)

gvee提供了一个很好的答案,解释了为什么var yext = d3.extent(data, d => d[1]); var sy = d3.scale.linear() .domain(yext) .range([height, 30]) // flip y-axis .nice(); -like不是正确使用的运算符,并提供了另一种方法。他先回答,你应该接受他的回答。我只想提供一些额外的建议。

作为对他的方法的略微修改,我建议使用-notlike而不是使用-Exclude语句,例如:(我也更改了Where,因为那是保留变量)< / p>

$input

但是,不是查询目标计算机,而是通过网络发回所有数据,然后通过网络向目标计算机发送删除这些文件夹的请求,为什么不向目标计算机发送一个命令并让它完成所有操作工作没有那么多网络聊天?

#Get target computer name
$computer = (Read-Host "Enter Computer name")
#Create array of users to keep, include yourself by default
$UDirs = @('ntanghe')
do {
  $UserInput = (Read-Host "Enter Username")
  if ($UserInput -ne '') {$UDirs += $UserInput}
}
until ($UserInput -eq '')

$UDirs

GCI "\\$computer\c$\Users" -Directory -Exclude $UDirs | Remove-Item -Recurse -Force -WhatIf

然后,只要您确信要删除的内容是所需的文件夹,就可以删除<stuff to get $computer and $UDirs> Invoke-Command -ScriptBlock {GCI C:\Users -Directory -Exclude $using:UDirs|Remove-Item -Recurse -Force -WhatIf} -ComputerName $computer ,并且您已完成设置。

最后,如果可能,您应该确保目标计算机在线。

-WhatIf