Вызов vbscript-скрипта из Powershell выглядит как «переписать его в Powershell» (не судить). @KoryGill задает интересный вопрос: «Почему бы просто не позвонить в Get-Printer»?
Но, к вашему вопросу, вы можете полностью превратить это в объект, но вам придется выполнить некоторые манипуляции с текстом:
$printer_stuff = $(cscript prnmngr.vbs -l)
Это создаст строковый массив с именем $printer_stuff
, где у каждого элемента есть отдельная строка вывода. Вы захотите составить список токенов для каждого свойства принтера, например, имени сервера, имени принтера и т. Д. Вы будете перебирать выходные данные (в строковом массиве), копируя свойства в PSObject. Вот дешевый пример, чтобы продемонстрировать это:
## Make a list of tokens
$tokens = @('Server name', 'Printer name', 'Share name')
## This will be your printer object
$printer = New-Object -TypeName PSObject
## Parsing the string array and stuffing the good bits into your printer object
foreach ($thing in $printer_stuff[0..17]) {
foreach ($token in $tokens) {
if ($thing -match $token) {
Add-Member -InputObject $printer -MemberType NoteProperty -Name $token -Value $thing.Replace($token, '')
}
}
}
## Here is your object...
$printer
Если сценарий prnmgr.vbs будет возвращать информацию на нескольких принтерах, вы можете поместить этот $printer
объект в массив:
$printers = @()
....
$printers += $printer
Вы можете извлекать данные каждого принтера из массива строк с помощью чего-то вроде ...
$min = 0
$max = $size
while ($min -lt $printer_stuff.length) {
$printer_stuff[$min..$max]
$min = $max + 1
$max += $size
}
Как видите, это большая боль в заднице, поэтому я предлагаю просто переписать это в Powershell. Если вы достаточно ловки, чтобы сделать этот бит, вы достаточно ловки, чтобы портировать vbscript-скрипт.
Удачи,
A-