2012-06-22 5 views
3

Im пытается написать очень короткий сценарий powershell, который запускает несколько команд, передает их вывод в текстовый файл, а затем выполняет поиск по ключевому слову.Проблема с запятыми powershell

Я не могу понять, что нужно изменить, однако для этой линии:

wmic service get name, startname | out-File "$pwd\admin\wmic.txt" 

WMIC.exe : Invalid GET Expression. 
At \\test.ps1:7 char:5 
+ wmic <<<< service get name startname | out-File "$pwd\admin\wmic.txt" 
+ CategoryInfo   : NotSpecified: (Invalid GET Expression.:String) [], RemoteException 
+ FullyQualifiedErrorId : NativeCommandError 

Я считаю, что ошибка генерируется из «» в PowerShell использует запятые для создания массива. Любые мысли или предложения?

Благодаря

+4

Я currious почему вы используете WMIC? У PS намного лучшие способы доступа к WMI (Get-WMIObject). У него даже есть cmlets, которые характерны для работы с сервисами (Get-Service). – EBGreen

+0

Вы пробовали «имя, начало»? – Lee

+0

Цитаты не работают, я считаю, что это не синтаксически правильно. – ToastyMallows

ответ

3
wmic service get name"," startname| out-File "$pwd\admin\wmic.txt" 

Это легко разрешить запятую, без изменений.

+0

Я думаю, что этот комментарий лучше и должен быть принят. –

+0

Также 'будет делать трюк. Это символ спасения. – IGRACH

1

Ответ на этот вопрос заключается в использовании Start-Process командлета. Это упростит интерпретацию аргументов командной строки, поскольку вы также можете заранее построить аргументы командной строки, сохранить их в переменной и затем ссылаться на них с использованием имени переменной.

$WmicArgs = 'service get name, startname'; 
Start-Process -FilePath wmic.exe -ArgumentList $WmicArgs; 

Но почему вы даже используете WMIC.exe?

Есть более простые способы работы с WMI, например, с помощью ускорителей типа PowerShell [wmi], [wmiclass], [wmisearcher] и командлета Get-WmiObject.

+0

Я использую WMIC, потому что мне нужно найти все места, где используется «администратор». Я планировал получить выход wmic-сервиса и сохранить его в текстовом файле. Затем отсюда выполните поиск в администраторе слов и верните всю строку в новый файл, если это возможно. – Jingles177

+0

Какая информация вам нужна от WMI? Что вы подразумеваете под «местами, где используется администратор?» Я мог бы помочь вам дальше. –

+0

Мне просто нужно было посмотреть, какое имя и имя запуска запущены для WMIC. Его небольшая неопределенная причина, я не уверен, как объяснить, что я пытаюсь сделать. Я закончил тем, что выполнил простой командный скрипт, чтобы выполнить указанную выше команду, передать в файл и затем проанализировать этот файл для ключевого слова, а затем, наконец, отправить эту информацию в новый файл для последующего использования. Спасибо за вашу помощь. – Jingles177

1

Начиная с Powershell 3.0 есть новый оператор маскирование --% доступны (см волшебный параметр в release notes):

wmic --% service get name, startname | out-File "$pwd\admin\wmic.txt" 
Смежные вопросы