#powershell #powershell-remoting #.net-framework-version
#powershell #powershell-удаленное управление #.net-framework-version
Вопрос:
В этом ответе показано, как вывести список имен компьютеров в домене:
(([adsi]"WinNT://$((Get-WMIObject Win32_ComputerSystem).Domain)").Children).Where({$_.schemaclassname -eq 'computer'})
Если Path
свойство добавлено
... .Where({$_.schemaclassname -eq 'computer'}).Path
он выводит список в этом формате:
WinNT://{domainname}.net/{machine-name}
Как бы эта последовательность полных имен компьютеров была преобразована в массив или коллекцию, которые можно было бы повторять с помощью скрипта, найденного здесь?
Может ли эта команда (т. Е. Ее Вывод) Быть просто назначена переменной массива?
[array]$ComputerNames = ... (([adsi]"WinNT://$((Get-WMIObject <snip> ).Path
Я подозреваю, что нет, поскольку, когда я пытаюсь это
$ComputerNames = ... (([adsi]"WinNT://$((Get-WMIObject <snip> ).Path
foreach($computer in $ComputerNames) {
if($regKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $computer)) {
Я получаю сообщение об ошибке:
Exception calling "OpenRemoteBaseKey" with "2" argument(s): "The network path was not found."
At C:Users{myusername}Get-NetFrameworkVersion.ps1:40 char:8
if($regKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('Lo ...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CategoryInfo : NotSpecified: (:) [], MethodInvocationException
FullyQualifiedErrorId : IOException
Моя конечная цель — получить .Сетевые версии, установленные на всех компьютерах в домене.
Комментарии:
1. Проблема не в присвоении
$ComputerNames
, проблема в формате строки — попробуйтеforeach($Computer in $ComputerNames -replace '^.*?(?=[^/] $)'){...}
—-replace
операция удалит все, вплоть/
до имени машины перед именем компьютера, из всех строк, после чего они могут быть использованы2. @MathiasR.Jessen: Спасибо за помощь!