С Start-Job
документ :
Командлет Start-Job
запускает фоновое задание Windows PowerShell на локальном компьютере.
Фон Windows PowerShellзадание запускает команду без взаимодействия с текущим сеансом .
Следовательно, вы не можете отправить какой-либо ключ из текущего сеанса команде, выполняющейся внутри фонового задания.Отправка ключа должна быть внутри фоновой работы.К счастью, chkdsk.exe
принимает использование оператор конвейера (который отправляет результаты предыдущей команды следующей команде) следующим образом:
$FixCDrive = Start-Job -Name cDriveFix -ScriptBlock {Write-Output 'y'|chkdsk.exe c:/f}
или (используя echo
псевдоним для Write-Output
командлет):
$FixCDrive = Start-Job -Name cDriveFix -ScriptBlock {echo 'y'|chkdsk.exe c:/f}
Обратите внимание :
The type of the file system is NTFS.
Cannot lock current drive.
Chkdsk cannot run because the volume is in use by another
process. Would you like to schedule this volume to be
checked the next time the system restarts? (Y/N)
Чтобы ответить «да» на вопрос, заданный chkdsk c:/f
( исправить ошибки файловой системы в загрузочном разделе ), необходимо нажать Y , , затем Enter ,
Честно говоря, я не уверен, отправляет ли Write-Output
командлет Введите в конвейер.Если нет, форсировать вывод новой строки следующим образом:
Write-Output "y$([System.Environment]::NewLine)"|chkdsk.exe c:/f}