Я нахожусь в «забавной» ситуации, когда у меня есть учетные данные RDP около 200 серверов, но ни на одном из них не включен удаленный Powershell.
Мне нужна простая задача: перезапустить их все. Но все, что у меня есть, это учетные данные RDP (учетная запись администратора) (включая IP-адрес, имя пользователя и пароль каждого сервера).
Есть ли способ с моего ноутбука (Windows 10, если это актуально) PowerShell / Командная строка, я использую эти учетные данные и запускаю команду PowerShell / Cmd на этих удаленных серверах (в будущем мне могут потребоваться команды, отличные от shutdown
)?
PsExec довольно популярен для запуска произвольных команд на удаленных машинах.
Если вам нужно что-то, что можно использовать без загрузки стороннего программного обеспечения, встроенный shutdown.exe
также может выполнять удаленный перезапуск. У него даже есть графический интерфейс, если вы используете -i
флаг. Однако он не позволяет вам указывать альтернативные учетные данные, поэтому вам придется запускать его в контексте учетных данных удаленной учетной записи с чем-то вроде runas
.
Есть способы сделать это и с WMI, но shutdown.exe, вероятно, проще.
Как упоминал @ryanbolger, вы также можете сделать это с помощью WMI. Джеффри Хикс написал хорошую статью Вот. Получите список серверов через Active Directory или из текстового файла. В качестве примера ниже я использую текстовый файл, поскольку вы явно не сказали, что используете Active Directory. Вы также упомянули, что у вас есть имена пользователей и пароли. Если они разные, вам также придется добавить это для каждого сервера. Я предполагаю, что имя пользователя и пароль одинаковы для каждого из них. MSDN ссылка на опции в -argumentlist
$servers = get-content c:\listofservers.txt
$cred = get-credential
foreach ($server in $servers)
{
Get-WmiObject -class win32_operatingsystem -ComputerName $server -credential $cred |
Invoke-WMIMethod -name Win32Shutdown -credential $cred -argumentlist @(2)
}
Invoke-WMIMethod имеет параметр -whatif. Я рекомендую использовать это, чтобы убедиться, что все идет так, как вы ожидаете. Кроме того, сделайте это на ограниченном количестве тестовых компьютеров, прежде чем развертывать его на всех 200, чтобы убедиться, что он выполняет то, что вы хотите. В опубликованной мной ссылке вы также можете использовать разные параметры для -argumentlist, если некоторые серверы не перезагружаются по умолчанию.
Спасибо, Тим.
Итак ... две вещи. Сервер Rpc недоступен - если ничего не было сделано - брандмауэр обучает их тому, что они являются azureVms, я бы сказал, что это проблема брандмауэра 99%. Вопрос ... ваши виртуальные машины изолированы друг от друга? Если нет - авторизуйтесь в одном из них и просто используйте оттуда любой из описанных способов.