Jeśli CD do folderu, w którym mam wykonywalne binarne i wpisz swoją nazwę w PowerShell, zwraca standardowe wyjście z powrotem do PowerShell. PS C: Użytkownicy Użytkownik AppData Roaming NPM> Mybinary to ...

0
miran80 18 marzec 2021, 03:14

1 odpowiedź

Najlepsza odpowiedź

Skąd to robisz? ConsoleHost / Ise / Vscode Inne?

PowerShell robi dokładnie to, co zrobiłeś. Co robi plik wykonywalny? Co spodziewasz się? Wypróbuj przypadek użytkowania z dowolnym innym wbudowanym plikiem wykonywalnym.

# Examples: all of which send results back to the PowerShell console without popping a new window.

PS C:\Scripts> & "C:\Windows\system32\nslookup.exe"
# Results
<#
Default Server:  L...
Address:  172...
#>

PS C:\Scripts> nslookup stackoverflow.com
# Results
<#
Server:  L...
Address:  172...1

Non-authoritative answer:
Name:    stackoverflow.com
Addresses:  151...
#>
   
PS C:\Scripts> & 'nslookup' 'stackoverflow.com'
# Results
<#
Server:  L...
Address:  172...

Non-authoritative answer:
Name:    stackoverflow.com
Addresses:  151...
#>

PS C:\Scripts> & "nslookup" "stackoverflow.com"
# Results
<#
Server:  L...
Address:  172...

Non-authoritative answer:
Name:    stackoverflow.com
Addresses:  151....
#>

PS C:\Scripts> & "nslookup stackoverflow.com"
# Results
<#
& : The term 'nslookup stackoverflow.com' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
#>

PowerShell nie uruchamia plików wykonawczych, CMD.exe robi. Zauważ, że PowerShell_ise aktywnie blokuje interaktywne wykonywania

PowerShell ISE Ograniczenia (Windows) | Microsoft Docs.

https://docs.microsoft.com/en-us/previous-versions/windows/desktop/legacy/mt708811(v=vs.85)

$psUnsupportedConsoleApplications
# Results
<#
wmic
wmic.exe
cmd
cmd.exe
diskpart
diskpart.exe
edit.com
netsh
netsh.exe
nslookup
nslookup.exe
powershell
powershell.exe 
#>

Uruchamianie wykonywalnego w konsoli PowerShell, dopóki przekazujesz to wszystko, czego potrzebuje, pod kołdami CMD.exe, cmd.exe działa wykonywalna, a Stdout jest zwracany do konsoli wywołującej.

Bibliografia:

• PowerShell: Uruchamiane wykonywalne

https://social.technet.microsoft.com/wiki/contents/articles/7703.powershell-running-executables.aspx.

  1. Operator połączenia.
&

Dlaczego: używane do traktowania łańcucha jako pojedynczego polecenia. Przydatne do radzenia sobie ze spacjami.

W PowerShell V2.0, jeśli używasz 7Z.exe (7-Zip.exe) lub inne polecenie, które zaczyna się od numeru, musisz użyć operatora wywołania polecenia i.

Parser PowerShell V3.0 robi teraz mądrzejszy, w tym przypadku nie potrzebujesz i już nie potrzebujesz.

Szczegóły: Uruchamianie bloku polecenia, skryptu lub skryptu. Operator połączenia, znany również jako "Operator wywołania", pozwala uruchomić polecenia przechowywane w zmiennych i reprezentowanych przez ciągi. Ponieważ operator połączenia nie przeanalizuje polecenia, nie może interpretować parametrów poleceń

# Example:

& 'C:\Program Files\Windows Media Player\wmplayer.exe' "c:\videos\my home video.avi" /fullscreen

Rzeczy mogą być trudne, gdy zewnętrzne polecenie ma wiele parametrów lub istnieją spacje w argumentach lub ścieżkach!

Ze spacjami musisz zniszczyć znaki cudzysłowu, a wynik nie zawsze jest czysty!

W tym przypadku lepiej jest oddzielić wszystko jak:

$CMD = 'SuperApp.exe'
$arg1 = 'filename1'
$arg2 = '-someswitch'
$arg3 = 'C:\documents and settings\user\desktop\some other file.txt'
$arg4 = '-yetanotherswitch'
 
& $CMD $arg1 $arg2 $arg3 $arg4
 
# or same like that:
 
$AllArgs = @('filename1', '-someswitch', 'C:\documents and settings\user\desktop\some other file.txt', '-yetanotherswitch')
& 'SuperApp.exe' $AllArgs

Za pośrednictwem VSCode można uzyskać różne odpowiedzi w zależności od tego, czy używasz zintegrowanej konsoli VSCODES (środowisko ise podobne) lub konsoli / konsoli PowerShell (normalna konsola PowerShell).

1
postanote 18 marzec 2021, 03:27