pátek 9. dubna 2010

Hej, mistře Šelíku!

Mist Šelík dohání to, co v minulých měsících zameškal a má před sebou nový Skriptíkův problém.

image

Máme několik možností.

Použít WScript.Network

PS C:\> (New-Object -Com WScript.Network).RemovePrinterConnection('\\server\Printer007')

Rychlé a účinné. Vytvoříme si nový objekt a okamžitě voláme jeho metodu RemovePrinterConnection. Potřebujeme vědět jenom jméno tiskárny. Předchzí řádku můžeme také rozepsat do (pro někoho možná srozumitelnější) formy jako:

PS C:\> $printerName = '\\server\Printer007'
PS C:\> $obj = New-Object -ComObject WScript.Network
PS C:\> $obj.RemovePrinterConnection($printerName)

Použití akcelerátoru [wmi]

Poněkud složitější konstrukce:

PS C:\> [wmi](gwmi Win32_Printer -Filter 'Name LIKE "%Printer007%"').Delete()

kterou můžeme opět rozepsat jako:

PS C:\> $prn = Get-WmiObject Win32_Printer -Filter 'Name LIKE "%Printer007%"'
PS C:\> [wmi]$prn.Delete()

V tomto případě si nejdříve do proměnné uložíme hledanou tiskárnu. Používáme parametr Filter, protože dotaz je rychlejší než při použití cmdletu Where-Object (Get-WmiObject Win32_Printer |Where-Object {$_.Name -like '*Printer007*'}). Pozor na jednu věc: ve filtru musíme použít znak ‘%’ jelikož se jedná vlastně o WQL dotaz prováděný na úrovni WMI.

Ve druhém řádku již voláme metodu Delete() a pomocí [wmi] vlastně provádíme “přetypování” na objekt System.Management.ManagementObject, který metodu Delete() obsahuje.

Ačkoli VBS moc rád nemám, v tomto případě bych asi osobně zvolil první možnost, která mi přijde jednodušší a pochopitelnější.

Banner mistra Skriptíka je stažen ze stránek TechNet Flash zpravodaje. Děkuji týmu TechNetu za možnost jeho použití pro potřeby tohoto článku.

Žádné komentáře: