Mam kilka problemów z uruchomieniem polecenia PowerShell. Wszystko, co robi, to uruchomienie polecenia, które zostanie uruchomione w oknie wiersza polecenia CMD.
Oto polecenie:
"C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\i386\CmRcViewer.exe" PCNAME
Próbowałem następujących bez powodzenia (próbowałem wielu iteracji, aby spróbować uzyskać taką, która działa. Składnia prawdopodobnie jest schrzaniona):
$TEXT = $textbox.Text #$textbox is where the user enters the PC name.
$CMDCOMMAND = "C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\i386\CmRcViewer.exe"
Start-Process '"$CMDCOMMAND" $TEXT'
#iex -Command ('"C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\i386\CmRcViewer.exe"' $TEXT)
Polecenie po prostu otworzy okno zdalnego połączenia SCCM z komputerem określonym przez użytkownika w polu tekstowym.
powershell
command-line
cmd
user3585839
źródło
źródło
Odpowiedzi:
Spróbuj tego:
& "C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\i386\CmRcViewer.exe" PCNAME
Dla PowerShell ciąg „...” jest po prostu ciągiem i PowerShell ocenia go, wyświetlając go na ekranie. Aby PowerShell wykonał polecenie, którego nazwa jest w ciągu, użyj operatora wywołania
&
.źródło
ipconfig.exe
bez konieczności używania&
. Jedynym momentem, którego potrzebujesz,&
jest wywołanie nazwy polecenia w postaci ciągu. I musisz użyć „ciągu znaków”, gdy w ścieżce lub nazwie pliku jest spacja.&
, ponieważ PowerShell pomyśli, że cały ciąg jest nazwą pliku wykonywalnego. Zamiast tego podaj cytat tylko z nazwy pliku wykonywalnego, a następnie umieść jego parametry.&
icmd
?&
jest operatorem wywołania PowerShell (aka wywołania). Pozwala na wykonanie polecenia, gdy to, co masz, jest ciągiem zawierającym nazwę polecenia lub ścieżkę do exe. Możesz również określić blok skryptu, np.&{$foo=42}
Lub obiekt CommandIno, np$cmd = Get-Command Get-Date; &$cmd
.cmd
to inna powłoka. Zauważ, że jest&
wykonywany w zakresie podrzędnym, więc zauważysz, że po zakończeniu działania bloku skryptu, który ustawiono$foo
powyżej,$foo
nie jest już ustawiony.Aby uruchomić lub konwertować pliki wsadowe zewnętrznie z PowerShell (szczególnie jeśli chcesz podpisać wszystkie skrypty zaplanowanych zadań certyfikatem), po prostu tworzę skrypt PowerShell, np. Deletefolders.ps1.
Wprowadź do skryptu następujące informacje:
cmd.exe /c "rd /s /q C:\#TEMP\test1" cmd.exe /c "rd /s /q C:\#TEMP\test2" cmd.exe /c "rd /s /q C:\#TEMP\test3"
* Każde polecenie należy umieścić w nowej linii, ponownie wywołując cmd.exe.
Ten skrypt można teraz podpisać i uruchomić z programu PowerShell, wysyłając polecenia do wiersza polecenia /
cmd
bezpośrednio.Jest to znacznie bezpieczniejszy sposób niż uruchamianie plików wsadowych!
źródło
sc query serviceName
z PowerShell myśląc, że się wykona, ale bez wyjścia. Wypróbowałem kilka iteracji techniki &, bez kości. Ale uruchomienie go w zalecany sposób zadziałało. Następnie trafiłem na cmd.exe /? zobaczyć, jakie inne cuda mnie czekają. Lubię uruchamiać cmd tylko wtedy, gdy jest to potrzebne.Jednym z rozwiązań byłoby rury Twojego polecenia z PowerShell do CMD. Uruchomienie następującego polecenia spowoduje przekazanie
notepad.exe
polecenia do CMD, który następnie otworzy aplikację Notatnik.PS C:\> "notepad.exe" | cmd
Po uruchomieniu polecenia w CMD nastąpi powrót do monitu programu PowerShell i będzie można kontynuować uruchamianie skryptu programu PowerShell.
Zmiany
Wyświetlany jest komunikat startowy CMD
Jak wskazuje mklement0 , ta metoda pokazuje komunikat startowy CMD. Jeśli miałbyś skopiować dane wyjściowe za pomocą powyższej metody do innego terminala, wiadomość startowa zostanie skopiowana wraz z nią.
źródło
&
nie. Np.& "mklink"
Nie pracował dla mnie podczas"mklink" | cmd
pracyDla tych, którzy mogą potrzebować tych informacji:
Doszedłem do wniosku, że można prawie uruchomić polecenie, które jest w twoim
PATH
skrypcie PS, i powinno działać.Czasami może być konieczne wstępne uruchomienie tego polecenia za pomocą
cmd.exe /c
Przykłady
Wywołanie gita ze skryptu PS
Musiałem przepakować zapakowanego
git
klientaChocolatey
(dla tych, którzy mogą nie wiedzieć, jest to rodzaj sklepu z aplikacjami dla systemu Windows), który masowo używa skryptów PS.Dowiedziałem się, że raz
git
jest wPATH
poleceniach takich jak$ca_bundle = git config --get http.sslCAInfo
zapisze lokalizację
git
crt
pliku w$ca_bundle
zmiennej.Szukam aplikacji
Innym przykładem będącym połączeniem obecnego postu SO i tego postu SO jest użycie
where
polecenia$java_exe = cmd.exe /c where java
zapisze lokalizację
java.exe
pliku w$java_exe
zmiennej.źródło
cmd /c
wywołać jego wewnętrzne polecenia, takie jakmklink
. Z drugiej stronywhere.exe
jest to program zewnętrzny, więc możesz go wywołać bezpośrednio. Jednak ze względu na konflikt nazwy z wbudowanymwhere
aliasem programu PowerShell (dlaWhere-Object
) należy użyćwhere.exe
; npwhere.exe java
.Get-Command
zamiast dzwonićcmd
? Tak samo jak wcześniej:$java_exe = $(Get-Command java.exe).Source
Aby uruchomić ten program zewnętrzny, należy użyć polecenia cmdlet Invoke-Command. Zwykle działa bez wysiłku.
Jeśli potrzebujesz więcej niż jednego polecenia, użyj polecenia cmdlet Invoke-Expression z
-scriptblock
opcją.źródło