Powershell for Windows

18.08.2010

Получить список открытых файлов на удаленном сервере.

Filed under: PowerShell — Метки: , , , , , , — Yamshikov Pavel @ 10:58 дп

Вариант 1. Используем WMI

$server = «server»

$command = ‘cmd /k net file > c:\openfiles.txt’

([wmiclass]»\\$server\root\cimv2:Win32_Process»).create($command)

Start-Sleep 2

Invoke-Item \\$server\c$\openfiles.txt

# Remove-Item \\$server\c$\openfiles.txt

__________________________________________________________

Вариант 2. Используем ADSI.

$server = «server»

$adsi = [adsi]»WinNT://$server/LanmanServer»

$users = $adsi.psbase.invoke(«resources») | foreach {$_.gettype().invokeMember(«user»,»GetProperty»,$null,$_,$null)}

$paths = $adsi.psbase.invoke(«resources») | foreach {$_.gettype().invokeMember(«path»,»GetProperty»,$null,$_,$null)}

for($i = 0;$i -lt $users.length; $i++) { «{0}: {1}» -f $users[$i],$paths[$i] }

_____________________________________________________________

Вариант 3. Используем WS-Management.

winrm -r:fs C:\Windows\System32\openfiles.exe

Вариант 4. Сергей (AKA ShS) :

C:\Windows\System32\openfiles.exe /query /S <ComputerName>

Источник

01.06.2010

Получение списка членов локальной группы на всех компьютерах доменной сети.


function Seach-LocalGroupMemberDomenNetwork(){
param(
$Domen,
$GroupSID

)

function Ping ($Name){
$ping = new-object System.Net.NetworkInformation.Ping
if ($ping.send($Name).Status -eq "Success") {$True}
else {$False}
trap {Write-Verbose "Error Ping"; $False; continue}
}


[string[]]$Info
[string[]]$Computers


# Получам список компьютеров доменной сети
$Computers = Get-QADComputer -Service $Domen -OSName '*XP*','*Vista*','*7*' -SizeLimit 0 -ErrorAction SilentlyContinue |
Select-Object name -ExpandProperty name

foreach ($Computer in $Computers){
# Проверяем доступен компьютер или нет
$Alive = Ping $Computer
if ($Alive -eq "True"){Write-Host "Seach $Computer" -BackgroundColor Blue

# Получаем имя группы
Trap {Write-Host "Error WMI $Computer";Continue}
$GroupName = Get-WmiObject win32_group -ComputerName $Computer |
Where-Object {$_.SID -eq '$GroupSID'} |
Select-Object name -ExpandProperty name

if ($GroupName){
# Получаем список членов локальной группы
Trap {Write-Host "Error ADSI $Computer";Continue}
$Users = ([ADSI]"WinNT://$Computer/$GroupName").psbase.invoke("Members") |
% {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)}

# Записываем результаты
$Info += $Users | % {$_ | Select-Object @{e={$Computer};n='Computer'},@{e={$_};n='Login'}}
}
}
}
# Вывод результатов
$Info

}

Для переменой $GroupSID данные можно найти в документе Well-known security identifiers in Windows operating systems.

Пример:

Seach-LocalGroupMemberDomenNetwork -Domen Mydomen -GroupSID S-1-5-32-544
Получаем список пользователей локальной группы администраторов на всех компьютерах домена.

31.05.2010

Получение списка членов локальной группы.

Filed under: PowerShell — Метки: , , , , , , , , , , — Yamshikov Pavel @ 4:21 пп

В PowerShell функция выглядит вот так:

function Seach-LocalGroupMemberComputerNetwork(){
#Задаем параметры. Имя компьютера и Имя группы
param(
$Computer,
$GroupName

)
#Получаем список членов группы
([ADSI]"WinNT://$Computer/$GroupName").psbase.invoke("members") |
%  {$_.GetType().InvokeMember("Name", ‘GetProperty’, $null, $_, $null)}
}

Пример:
Seach-LocalGroupMemberComputerNetwork -Computer Mycomp -GroupName Пользователи
Получаем список пользователей локальной группы Пользователи на компьютере Mycomp.

Блог на WordPress.com.