Przeczytałem już i wypróbowałem różne sposoby, ale to po prostu nie da rady ... Próbowałem nawet uciec ze spacji, a także próbowałem dodać dodatkowe cytaty (cytaty unikane) przed ścieżką ...
$cmd = 'powershell.exe'
$dir = 'C:\Program Files (x86)\W T F'
$inner = "-NoExit -Command cd $dir"
$arguments = "Start-Process powershell -ArgumentList '$inner' -Verb RunAs"
& $cmd $arguments
Nadal daje mi to:
x86 : The term 'x86' 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.
At line:1 char:22
+ cd C:\Program Files (x86)\W T F
+ ~~~
+ CategoryInfo : ObjectNotFound: (x86:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Próbowałem z inną ścieżką, powiedzmy C:\Blah\W T F
, że nadal narzeka na przestrzenie w środku W T F
.
Edycja: Zasadniczo musiałem uruchomić elevated powershell
CD, a następnie CD do mojego katalogu, aby uruchomić skrypt poinstalacyjny. Ale mam ciężką płytę CD w moim katalogu, byłem w stanie uruchomić podwyższoną wersję PowerShell, ale zawsze tak jest c:\windows\system32
.
Edycja2:
$PSVersionTable
Name Value
---- -----
PSVersion 4.0
WSManStackVersion 3.0
SerializationVersion 1.1.0.1
CLRVersion 4.0.30319.42000
BuildVersion 6.3.9600.18728
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion 2.2
Edycja3:
Mam to wywołanie skryptu load-ems.ps1 (w celu załadowania powłoki Exchange Management Shell) i próbuję uruchomić tę powłokę jako podniesioną. Ale moim problemem jest to, że 1) the shell would start in system32 and won't find my scripts
,2) if i try to CD to my directory, i can't.
. ".\find-exchange.ps1"
$remoteexchangeps1 = Find-Exchange
$commands = @(
". '$remoteexchangeps1';",
"Connect-ExchangeServer -auto -ClientApplication:ManagementShell;",
".\plugin-reinstall.ps1;"
)
$command = @($commands | % {$_})
powershell.exe -noexit -command "$command"
źródło
& "C:\Program Files (x86)\W T F"
?& : The term 'C:\Program Files (x86)\W T F' is not recognized as the name of a cmdlet,
$env:ProgramFiles(x86)
.Odpowiedzi:
Musisz zawrzeć argument na dysku CD w pojedynczych cudzysłowach, aby zachować spacje. Użyj Start-Process bezpośrednio, aby uniknąć zbyt dużej interpolacji zmiennych:
źródło
Jeśli jest to wymiana 2013, możesz zamiast tego spróbować:
źródło
Dzięki komentarzowi @matandra zmodyfikowałem trochę skrypt i dostałem to, czego chciałem. Musiałem zawinąć ścieżkę
'
pojedynczym cytatem. Przykład:"cd '$pwd'"
Zamieszczam również cały skrypt, mając nadzieję, że może pomóc innym. Teraz mogę znaleźć i załadować EMS, a następnie wykonać wszelkie dodatkowe polecenia, których potrzebuję. Wywołanie
Load-EMS
bez argumentów po prostu załaduje dla ciebie EMS (programowo, niezależnie od tego, która wersja programu Exchange Server jest zainstalowana, o ile jest zainstalowana).Tak, robi znacznie więcej niż pierwotnie prosiłem , ale widząc to
superuser
forum, mój skrypt może pomóc innym:źródło