Вот эффективный идиоматический способ PowerShell для синхронного вызова вашей команды в одном и том же окне консоли с выходом, подключенным к потокам PowerShell :
# Determine the executable's file path.
$c = Join-Path $PSScriptRoot 'USMT\amd64\scanstate.exe'
# Note how &, the call operator is needed for invocation, because the
# executable path is stored in a *variable* (the same would apply if
# a *quoted* string were used).
& $c G:\a_ex03505\10.28.19-14.55.37 /ue:*\* /ui:$user /o /c /i:Custom\MigAppO2019.xml /i:Custom\MigUser_Including_Downloads.xml /i:Migdocs.xml /i:Custom\ExcludeSystemFolders.xml /i:Custom\ExcludeDrives_D_to_Z.xml /i:Custom\ExcludeOneDriveUserFolders.xml
Если вам нужно выполнить команду в заданном рабочем каталоге :
Push-Location $dir
# Note how scanstate.exe, assumed to be located in $dir,
# must be invoked as .\scanstate.exe - with a path component that explicitly
# references the current dir. - in order to be executed from there.
#
# By design, for security reasons, PowerShell doesn't execute
# executables in the current dir. by file name only - that only works
# for executables in the system's path (dirs. listed in $env:PATH).
.\scanstate.exe G:\a_ex03505\10.28.19-14.55.37 /ue:*\* /ui:$user /o /c /i:Custom\MigAppO2019.xml /i:Custom\MigUser_Including_Downloads.xml /i:Migdocs.xml /i:Custom\ExcludeSystemFolders.xml /i:Custom\ExcludeDrives_D_to_Z.xml /i:Custom\ExcludeOneDriveUserFolders.xml
Pop-Location
То есть, вышеприведенное вызывает scanstate.exe
в текущем окне консоли и ожидает его завершения,прохождение его выхода через - хотя с опцией для захвата / ретрансляции / перенаправления выхода для дальнейшей обработки (например, $output = scanstate.exe ...
/ scanstate.exe | ForEach-Object { ... }
, scanstate.exe 2>$null
)
Вам нужно только Start-Process
, если вы хотите запустить команду в новом отдельном окне консоли .
- Обратите внимание, что это не будет работать на Unix -подобной платформе с PowerShell Core , где неизменно подразумевается
-NoNewWindow
.
Консольные приложения никогда не требуют cmd.exe
для выполнения - PowerShell сам по себе является оболочкой, как и cmd.exe
, поэтому позвольте it обработать вызов, как показано выше.
Для получения дополнительной информации см. этот ответ .
Вы заявляете, что в вашем случае использования окно консоли скрыто , поэтому, если вам нужна команда для запуска visible , вам действительно нужно Start-Process
для запускакоманда в новом окне :
Start-Process -WorkingDirectory $dir scanstate.exe 'G:\a_ex03505\10.28.19-14.55.37 /ue:*\* /ui:$user /o /c /i:Custom\MigAppO2019.xml /i:Custom\MigUser_Including_Downloads.xml /i:Migdocs.xml /i:Custom\ExcludeSystemFolders.xml /i:Custom\ExcludeDrives_D_to_Z.xml /i:Custom\ExcludeOneDriveUserFolders.xml'
Обратите внимание на использование одной буквенной строки ('...'
) для передачи всех аргументов, которые неявно связываются с параметром -ArgumentList
.
Добавьте -Wait
, чтобы дождаться закрытия нового окна.