Удалить список профилей пользователей - PullRequest
0 голосов
/ 06 августа 2020

(Я новичок ie в PS, который в основном использовал VBS и Batch, поэтому я все еще работаю над следующими сценариями PS)

Мне нужно удалить большинство (но не все) учетные записи домена из все 500 наших систем. Некоторые из них взяты из специального списка c. Некоторые следуют стандартному c формату * 21, * 19, и т.д. c ...

Я могу найти сценарии, которые позволят мне удалить конкретную учетную запись c, но я не могу понять как передать ему длинный список или использовать подстановочные знаки ...

Это кажется многообещающим, если я смогу выяснить, как получить в нем нужные значения ... взято из https://www.nextofwindows.com/delete-user-profiles-on-a-remote-computer-in-powershell

 $Computer = Read-Host "Please Enter Computer Name: "

 $user = Read-Host "Enter User ID: "

Invoke-Command -ComputerName $computer -ScriptBlock {

param($user)

$localpath = 'c:\users\' + $user

Get-WmiObject -Class Win32_UserProfile | Where-Object {$_.LocalPath -eq $localpath} | 

Remove-WmiObject

} -ArgumentList $user

1 Ответ

0 голосов
/ 06 августа 2020

Похоже, вы почти достигли цели. Просто используйте несколько конвейеров и foreach l oop или два.

Это попытается удалить всех пользователей в списке со всех компьютеров в списке:

# define function that takes user list from pipeline
function Remove-User {
    [cmdletBinding()]
    param(
        [Parameter(ValueFromPipeline=$true,Mandatory=$true)]
        [string]
        $user,
        
        [Parameter(Mandatory=$true)]
        [string]
        $computer
    )
    
    process {
        # copied from question
        Invoke-Command -ComputerName $computer -ScriptBlock {
            Get-WmiObject -Class Win32_UserProfile | 
                Where-Object { $_.LocalPath -eq "c:\users\${$user}" } |
                    Remove-WmiObject
        } -ArgumentList $user
    }
}

# get your lists whatever way makes sense
$userList = Import-Csv -Path "users.csv" -Delimiter ','
$computerList = Import-Csv -Path "computers.csv" -Delimiter ','

# call function to remove all users for each computer
$computerList | ForEach-Object {
    $userList | Remove-User -computer $_
}

Я не уверен, откуда вы получаете свой список, но я использовал csv только потому, что.

* примечание: это исходит из предположения, что часть кода Invoke-Command из nextOf Windows делает то, что говорит

...