Powershell Запуск-процесс pnputil.exe

#powershell

#powershell

Вопрос:

Я пытаюсь запустить pnputil с помощью start-process, но, похоже, это не работает.

Вот скрипт, который работает без start-process:

 $Driver = Get-ChildItem "$PSScriptRoot" -Recurse -Filter "*inf"

$InstallDriver = foreach ($item in $Driver) {
          
PNPUtil.exe /add-driver $item.FullName /install

}
  

Но если я делаю то же самое с start-process, я не могу заставить его работать :

 $Driver = Get-ChildItem "$PSScriptRoot" -Recurse -Filter "*inf"

$InstallDriver = foreach ($item in $Driver) {
          
Start-Process PNPUtil.exe /add-driver $item.FullName /install

}
  

Я также пытался

 Start-Process PNPUtil -ArgumentList '/add-driver $item.FullName /install'

Start-Process PNPUtil -ArgumentList '/add-driver "$item.FullName" /install'

Start-Process PNPUtil -ArgumentList '/add-driver "${$item.FullName}" /install'

Start-Process PNPUtil -ArgumentList "/add-driver "${$item.FullName}" /install'

Start-Process PNPUtil -ArgumentList "/add-driver $item.FullName} /install"
  

Но это не работает

Кто-нибудь знает, почему это не работает? Спасибо за помощь

Ответ №1:

Все они являются отдельными аргументами. Одинарные кавычки вокруг переменных не позволят переменной расширяться, плюс, если вы заключаете $variable.property ее в двойные кавычки, вам нужно подвыражение $() . Вместо этого попробуйте следующее

 Start-Process PNPUtil -ArgumentList "/add-driver",$item.FullName,"/install"
  

Комментарии:

1. Привет, Дуг Маурер, и спасибо за вашу помощь, к сожалению, это тоже не работает. Для каждого файла .inf есть только черный ящик, и я вижу, что это текст справки для pnputil, поэтому аргументы по-прежнему неверны

2. Сработало в моем тестировании. У вас все еще есть кавычки вокруг элемента?

3. Я нашел решение. в некоторых именах файлов есть пробелы, поэтому, если я использую -ArgumentList «/ add-driver "$($item.FullName) » / install», это работает. Спасибо за помощь