Есть скрипт, который удаляет appx приложения.
1. Bat - @rem Remove Apps
PowerShell -command "get-appxpackage -allusers *3dbuiler* l remove-appxPackage" И другие...
2. Запускаю cmd от администратора, \\сетевой путь к PsExec.exe @\\сетевой путь к файлу с пк . txt -u main\уз админа -е -с \\пробовал и на сетевой и кидал в корень диска С путь к батнику.
3. Если дать пользователю права админа и запустить скрипт, он отрабатывает и на сетевой шаре и в корне. При запуске пункта 2 с своего пк пишет следующее: Get-appxpackage : не удается найти указанный файл (исключение из HRESULT: 0×80070002) сам батник запускается у пользователя под системой!
Сама система не видит этих приложений, почему?
Может сам бат файл не там лежит?
Если можно опишите поподробнее
1. В psexec пути задаются относительно того компа, на котором запускается программа. Если путь сетевой, то пользователь, из-под которого удаленно запускается программа, должен иметь доступ к сетевому ресурсу. В этой части у вас вроде все нормально.
2. Т.к. вы запускаете скрипт (батник), то в psexec вы должны запускать не его, а cmd.exe и передавать путь к батнику как параметр cmd.
3. В винде действует UAC. Он действует и на программы, запускаемые удаленно. А значит, даже если вы запустили программу из-под админа, то программа должна запросить повышение привилегий..
У psexec вроде есть ключ для запроса повышения привилегий, посмотрите справку.
Действие UAC можно отключить для удаленно запускаемых программ через реестр:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\LocalAccountTokenFilterPolicy = 1
Если параметра нет, то его надо создать, тип параметра REG_DWORD.
После правки реестра необходимо перезагрузить комп. Править надо реестр только компа на котором должна удаленно запускаться программа.
4. В psexec так же есть ключ, который позволяет сначала скопировать запускаемую программу на удаленный комп, а потом ее запустить. Но т.к. вы запускаете скрипт, то, видимо, этот ключ в вашем случае не сработает.
Для отладки работы psexec лучше начать с какого-то простого батника, не требующего прав админа, такого, чтоб на экране было видно, что он работает (например выводите какое-нибудь сообщение с помощью echo). Положите батник на локальный диск удаленного компьютера и пытайтесь его запустить удаленно.
После того как это получится, переложите батник на сетевой ресурс - и то же самое.
А дальше переходите к вашему реальному батнику и поиграйте с повышением привилегий.
Кстати, запускать удаленно программы по моему можно с помощью wmic, погуглите. Но там действуют все те же правила, что и для psexec, так что разницы особой нет. И, наверное, тот же powershell то же умеет удаленно запускать программы.
Dewz, Вы бы использовали тэг code, потому что это ещё хуже потока сознания.
Ни пробелов, ни переводов строк не видно, соответственно, никаких ошибок в нём не найти
Но в целом скрипт ужастный.
Явно его можно было бы упростить и улучшить, если использовать через PSRemoting
res2001, MaxKozlov, я не силен в скриптах, но он рабочий! Под администратором отрабатывает.
Путь
C:\windows\system32>\\servs\as\psexec.exe @\\servs\as\delit.txt -u main\you001 -e -c C:\delpp.bat
Запускаю, вожу пароль от администратора, вижу следующее:
C:\windows\system32>powershell -command "get-appxpackage-allusers *xboxonesmartglass* | remove-appxPackage"
Get-appxpackage : не удается найти указанный файл. (Исключение из HRESULT 0X80070002) что нужно изменить?
Во-первых, если команду запускает powershell, ошибка выглядит не так
C:\Windows\system32>powershell -Command "get-appxpackage -allusers *xboxonesmartglass*"
get-appxpackage : The term 'get-appxpackage' 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:1
+ get-appxpackage -allusers *xboxonesmartglass*
+ ~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (get-appxpackage:String) [], Com
mandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
test.cmd exited on server with error code 1.
Во-вторых, я не вижу пробела между get-appxpackage и -allusers
У вас, кстати, ваш delpp.bat в какой кодировке ?
можно ещё к powershell полный путь указать, C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Dewz, mkdir ?
Нет смысла пробовать создавать папки. у вас именно powershell не работает, с его командами и надо пробовать
а cmd должны быть ASCII/Windows-1251, а не utf
Dewz, Ну в таком случае требуется
1. Убедиться что на том компе windows10, потому что раньше оно не работает :)
2. Правильно написать команду на удаление appx, потому что нифига не понятно, правильно ли она написана. Включая все необходимые пробелы и скобки
MaxKozlov , добавил к строчке -h
C:\windows\system32>\\servs\as\psexec.exe -h @\\servs\as\delit.txt -u main\you001 -e -c C:\delpp.bat
UAC "никогда не уведомлять"
Все также, не удается найти указанный файл.
"А через PSRemoting оаботает и без " Покажите как вы это сделали?
Dewz, Админские права-то у main\you001 на выбранных компах есть ?
Потому что вчера я смог добиться вашего результата только один раз, все остальные разы срабатывало нормально :)
PSRemoting:
Сначала надо включить на этих компах:
Если они в домене - можно через политики. Статеек на эту тему полно, например
Если не через политики - на каждом выполнить C:\Windows\System32\winrm.cmd quickconfig /q
Можно через тот же psexec от системы -
psexec @\\servs\as\delit.txt -s -e C:\Windows\System32\winrm.cmd quickconfig /q
Тут, если у вас нет прав запускать что-то на компах от системы, можно подставить -h -e -u main\you001 вместо -s
Убедиться что на всех компах прошло без ошибок - вернуло 0
После этого можно проверить что оно работает
Тут надо понимать, нужен ли юзер main\you001
Если вы на своём компе под ним и работаете - не нужен. Если таки нужен, придётся выполнить чуть по-другому
Запускаем Powershell, в нём
# Если юзер нужен
$cred = Get-Credential main\you001
Invoke-Command -ComputerName 'server' { Write-Host 'Hello' } -Credential $cred
# Если не нужен
Invoke-Command -ComputerName 'server' { Write-Host 'Hello' }
вместо server подставляем имя одного из ваших серверов
И если работает, запустить типа того
$servers = Get-Content \\servs\as\delit.txt
Invoke-Command -ComputerName $servers {
get-appxpackage -allusers *xboxonesmartglass* | remove-appxPackage
# Тут все остальные аналогичные команды. Для начала можно оставить только одну
}
# Если надо, после "}" подставляем <i>-Credential $cred</i> как и выше