#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», это работает. Спасибо за помощь