2016-04-10 11 views
0

Komut dosyası için gerçekten kötüyüm ancak her durumda özel etki alanı hesaplarını özel adlandırma kurallarıyla silmeleri gereken bir komut dosyası oluşturmam gerekiyor. Güç kabuğu v3 kullanıyoruz. Filtreleme profillerine sıkıştım. Ben kuş sayıları gibi birçok profil var: bb1231X, ba1231z, bb1231rw. Bu yüzden sadece BB **** X içeren profilleri silmek istiyorum ve çift onay işareti 7 sembol, 7 sembol X olmalı ve başlangıç ​​BB olmalıdır.Powershell, özel sembollerle sunucu etki alanı profillerini silme

Ve bu çift çek yazmayı nasıl bilmiyorum. Herhangi bir yardım mutluluk duyacaktır.

Güncel komut dosyası: (veya kısaca regex)

Function Get-System-Drive-Clean { 
    [CmdletBinding()] 
    Param(
    [Parameter(Mandatory=$true)] 
    [string]$computerName 
    ) 

    PROCESS { 

     foreach ($computer in $computerName) { 
      Write-Verbose "Housekeeping on $computer" 
      Write-Verbose "Mapping drive \\$computer\c$" 
      $drive = New-PSDrive -Name $computer.replace(".","-") -PSProvider FileSystem -Root \\$computer\C$ 
      write-Verbose "Checking windows version" 
      #Cheking windows version 
      $version = (Get-WmiObject -ComputerName $computer -Class Win32_OperatingSystem).version 
      Write-Verbose "Windows version $version" 


      #Profile Deleting area. 
      if ($version -ge 6) { 
       write-Verbose "Getting profiles from WMI (Win 2k8 and above)..." 
       $profiles = Get-WmiObject Win32_UserProfile -ComputerName $computer -Filter "LocalPath like 'C:%R'" 


       if ($profiles -ne $null) { 
        $profiles | foreach { 
         Write-Verbose ("Deleting profile: " + $_.LocalPath) 
         #$_.Delete() 
         #| Where {(!$_.Special) -and ($_.ConvertToDateTime($_.LastUseTime) -lt (Get-Date).AddDays(-5))} 
         } 
        } 
       } 
      } 
     } 
    } 
} 

cevap

2

Regular expressions Arkadaşlarınızın ve PowerShell onlar için yerel destek var! aşağıdaki gibi

PS C:\> 'BB8972X' -match '^BB.{4}X$' 
True 
PS C:\> 'BA9042W' -match '^BB.{4}X$' 
False 

I (^BB.{4}X$) Yukarıdaki örnekte kullanılan desen çalışır:

  • ^: çıplak şapka karakteri aracı

    Sen Normal ifade eşlemeyi yapmak -match operatörünü kullanabilirsiniz "dize konumu" başlangıcı "

  • BB: Bu, yalnızca iki B karakter
  • .{4}: Regex'te . "herhangi bir karakter" anlamına gelir. harfi X
  • $: {4} yüzden, herhangi bir karakter
  • X 4 nicelik anlam "önceki karakteri tam olarak 4" olan bu

Yani, eğer "dize pozisyonunda sonu" anlamına gelir bu isimlerle Dizinler bir dizi var ve sadece adı BB****X gibidir olanları istiyorum yapacağın:

$BBXDirs = Get-ChildItem -Directory |Where-Object {$_.Name -match '^BB.{4}X$'} 
+0

Merhaba, teşekkür Jessen replly için. Gösterdiğiniz gibi regex eklemeye çalıştığınız: $ profiles = Get-WmiObject -ComputerName $ bilgisayar Win32_UserProfile -filter "LocalPath Like 'C: \\ Kullanıcılar \\%'" -Match '^ b. {5} r $' bir hatam var. Get-WmiObject: 'Eşleştirme' parametre adıyla eşleşen bir parametre bulunamıyor. Satırda: 19 char: 125 + ... C: \\ Kullanıcılar \\% '"-Çoklu"^b. {5} r $' + ~~~~~~ + CategoryInfo: GeçersizArşiv: (:), ParameterB [-WmiObject alın] + FullyQualifiedErrorId indingException: NamedParameterNotFound, Microsoft.PowerShell.Comm ands.GetWmiObjectCommand bir WMI sorgusu içinde regex (. yani '-match' operatör) kullanamazsınız –

+0

, bu kadar bir * PowerShell * dil özelliği –

+0

yup, sadece işe yaradı! Sen awsome! :) Şimdi basicaly ben profilleri silme komut dosyası var, ama belki de bir sorun olabileceğine inandığım gibi, profildeki bilgileri silmek için biliyorum. Reg dosyası kullanılmayan kapaklardan temizlenmezse. –

İlgili konular