Link to home
Start Free TrialLog in
Avatar of ivan rosa
ivan rosaFlag for United States of America

asked on

deleting profiles while skipping admin

Hello folks,
i have created the following script to remove profiles from PCs, however what change would i make to skip the administrator profile?

$CLIENT = Get-Content "c:\Temp\computers.txt"
 
foreach($PC in $CLIENT){
    # Testing PC connectivity
    if(Test-Connection $PC -Count 1 -Quiet){
        # Gathering users from c:\users
        foreach($PCuser in (Get-ChildItem "\\$pc\c$\users" -Directory)){
            # delete  recursively
            RD "\\$PC\c$\Users\$($pcuser.name)\Desktop\*.*"
            RD "\\$PC\c$\Users\$($pcuser.name)\Downloads\*.*"
            RD "\\$PC\c$\Users\$($pcuser.name)\Documents\*.*"
            RD "\\$PC\c$\Users\$($pcuser.name)\Music\*.*"
            RD "\\$PC\c$\Users\$($pcuser.name)\Pictures\*.*"
            RD "\\$PC\c$\Users\$($pcuser.name)\Videos\*.*"
        }
    }else{
        Write-Warning "$PC is offline"
    }
} 

Open in new window


or if anybody has a a batch that'd be great too

Thanks for looking
Avatar of J0rtIT
J0rtIT
Flag of Venezuela, Bolivarian Republic of image

$CLIENT = Get-Content "c:\Temp\computers.txt"
function Remove-Recursively{
    [CmdletBinding()]
    param(
        [Parameter(position=0,Mandatory=$true)]$Path
    )
    BEGIN{}
    PROCESS{
        #Get Files and remove them
        $Files = [System.IO.Directory]::GetFiles($Path)
        $ProfileFolders = [System.IO.Directory]::GetDirectories($Path)
        if($ProfileFolders.Count -gt 0){
            foreach($profileFolder in $ProfileFolders){
                Remove-recursively -path $profilefolder
            }
        }
        

        if($Files.Count -gt 0){
            foreach($file in $Files){
                [System.IO.File]::Delete($file)
            }
        }
        [System.IO.Directory]::Delete($Path)
    }
    END{}
}
 
foreach($PC in $CLIENT){
    # Testing PC connectivity
    if(Test-Connection $PC -Count 1 -Quiet){
        # Gathering users from c:\users
        $Folders= [System.IO.Directory]::GetDirectories("\\$pc\C$\users")
        $Filtered = $Folders | where { $_ -notmatch "Admin"}

        foreach($PCuser in $Filtered){
            Remove-Recursively -path $pfolder
        }
    }else{
        Write-Warning "$PC is offline"
    }
} 

Open in new window

Avatar of ivan rosa

ASKER

Hi Jose, let's make it easier, what about to delete the entire profiles while skipping the admin & defaults?

unfortunate i tried your script and it gave me the error below
Remove-Recursively : Cannot bind argument to parameter 'Path' because it is null.
At C:\Users\johndoe\Desktop\removeprofile2.ps1:37 char:38
+             Remove-Recursively -path $pfolder
+                                      ~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Remove-Recursively], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Remove-Recursively
 
Remove-Recursively : Cannot bind argument to parameter 'Path' because it is null.
At C:\Users\johndoe\Desktop\removeprofile2.ps1:37 char:38
+             Remove-Recursively -path $pfolder
+                                      ~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Remove-Recursively], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Remove-Recursively
 
Remove-Recursively : Cannot bind argument to parameter 'Path' because it is null.
At C:\Users\johndoe\Desktop\removeprofile2.ps1:37 char:38
+             Remove-Recursively -path $pfolder
+                                      ~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Remove-Recursively], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Remove-Recursively
 
Remove-Recursively : Cannot bind argument to parameter 'Path' because it is null.
At C:\Users\johndoe\Desktop\removeprofile2.ps1:37 char:38
+             Remove-Recursively -path $pfolder
+                                      ~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Remove-Recursively], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Remove-Recursively
 
Remove-Recursively : Cannot bind argument to parameter 'Path' because it is null.
At C:\Users\johndoe\Desktop\removeprofile2.ps1:37 char:38
+             Remove-Recursively -path $pfolder
+                                      ~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Remove-Recursively], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Remove-Recursively
 
Remove-Recursively : Cannot bind argument to parameter 'Path' because it is null.
At C:\Users\johndoe\Desktop\removeprofile2.ps1:37 char:38
+             Remove-Recursively -path $pfolder
+                                      ~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Remove-Recursively], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Remove-Recursively
 
Remove-Recursively : Cannot bind argument to parameter 'Path' because it is null.
At C:\Users\johndoe\Desktop\removeprofile2.ps1:37 char:38
+             Remove-Recursively -path $pfolder
+                                      ~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Remove-Recursively], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Remove-Recursively
 
Remove-Recursively : Cannot bind argument to parameter 'Path' because it is null.
At C:\Users\johndoe\Desktop\removeprofile2.ps1:37 char:38
+             Remove-Recursively -path $pfolder
+                                      ~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Remove-Recursively], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Remove-Recursively
 
Remove-Recursively : Cannot bind argument to parameter 'Path' because it is null.
At C:\Users\johndoe\Desktop\removeprofile2.ps1:37 char:38
+             Remove-Recursively -path $pfolder
+                                      ~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Remove-Recursively], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Remove-Recursively
 
Remove-Recursively : Cannot bind argument to parameter 'Path' because it is null.
At C:\Users\johndoe\Desktop\removeprofile2.ps1:37 char:38
+             Remove-Recursively -path $pfolder
+                                      ~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Remove-Recursively], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Remove-Recursively

Open in new window


@shaun, GPO would it sounded good, thought this project is a temporary ...
ok so i re-edited the script with vision of just deleting the entire profile while skipping the default accounts but for some reason it's not deleting the files ...
$CLIENT = Get-Content "c:\Temp\computers.txt"

foreach($PC in $CLIENT){
    # Testing PC connectivity
    if(Test-Connection $PC -Count 1 -Quiet){
        # Gathering users from c:\users
        foreach($PCuser in (Get-ChildItem "\\$pc\c$\users" -Directory)){
            # delete  recursively
            Where ($PCuser -ne 'Default' -or $PCuser -ne 'Administrator' -ne $PCuser -ne 'Public') | RD "\\$PC\c$\Users\$PCuser\" -Force -Recurse
            echo "from this $PC all of this user was deleted $PCuser"
        }
    }else{
        Write-Warning "$PC is offline"
    }
}

Open in new window

can anybody kindly take a look of what am i doing wrong?
$CLIENT = Get-Content "c:\Temp\computers.txt"
function Remove-Recursively{
    [CmdletBinding()]
    param(
        [Parameter(position=0,Mandatory=$true)]$Path
    )
    BEGIN{}
    PROCESS{
        #Get Files and remove them
        $Files = [System.IO.Directory]::GetFiles("$Path")
        $ProfileFolders = [System.IO.Directory]::GetDirectories("$Path")
        if($ProfileFolders.Count -gt 0){
            foreach($profileFolder in $ProfileFolders){
                Remove-recursively -path "$profilefolder"
            }
        }
        

        if($Files.Count -gt 0){
            foreach($file in $Files){
                [System.IO.File]::Delete($file)
            }
        }
        [System.IO.Directory]::Delete("$Path")
    }
    END{}
}
 
foreach($PC in $CLIENT){
    # Testing PC connectivity
    if(Test-Connection $PC -Count 1 -Quiet){
        # Gathering users from c:\users
        $Folders= [System.IO.Directory]::GetDirectories("\\$pc\C$\users")
        $Filtered = $Folders | where { $_ -notmatch "Admin"}

        foreach($PCuser in $Filtered){
            Remove-Recursively -path "$pfolder"
        }
    }else{
        Write-Warning "$PC is offline"
    }
} 

Open in new window


Try this one and check if you got any errors.
it was not working because you gave a null path.
That was all it was complaining for.
thanks, buddy, although I got me an even bigger error log.

Exception calling "GetFiles" with "1" argument(s): "The path is not of a legal form."
At C:\Temp\removeprofiles.ps1:10 char:9
+         $Files = [System.IO.Directory]::GetFiles("$Path")
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentException

Exception calling "GetDirectories" with "1" argument(s): "The path is not of a legal form."
At C:\Temp\removeprofiles.ps1:11 char:9
+         $ProfileFolders = [System.IO.Directory]::GetDirectories("$Pat ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentException

Exception calling "Delete" with "1" argument(s): "The path is not of a legal form."
At C:\Temp\removeprofiles.ps1:24 char:9
+         [System.IO.Directory]::Delete("$Path")
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentException

Exception calling "GetFiles" with "1" argument(s): "The path is not of a legal form."
At C:\Temp\removeprofiles.ps1:10 char:9
+         $Files = [System.IO.Directory]::GetFiles("$Path")
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentException

Exception calling "GetDirectories" with "1" argument(s): "The path is not of a legal form."
At C:\Temp\removeprofiles.ps1:11 char:9
+         $ProfileFolders = [System.IO.Directory]::GetDirectories("$Pat ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentException

Exception calling "Delete" with "1" argument(s): "The path is not of a legal form."
At C:\Temp\removeprofiles.ps1:24 char:9
+         [System.IO.Directory]::Delete("$Path")
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentException

Exception calling "GetFiles" with "1" argument(s): "The path is not of a legal form."
At C:\Temp\removeprofiles.ps1:10 char:9
+         $Files = [System.IO.Directory]::GetFiles("$Path")
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentException

Exception calling "GetDirectories" with "1" argument(s): "The path is not of a legal form."
At C:\Temp\removeprofiles.ps1:11 char:9
+         $ProfileFolders = [System.IO.Directory]::GetDirectories("$Pat ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentException

Exception calling "Delete" with "1" argument(s): "The path is not of a legal form."
At C:\Temp\removeprofiles.ps1:24 char:9
+         [System.IO.Directory]::Delete("$Path")
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentException

Exception calling "GetFiles" with "1" argument(s): "The path is not of a legal form."
At C:\Temp\removeprofiles.ps1:10 char:9
+         $Files = [System.IO.Directory]::GetFiles("$Path")
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentException

Exception calling "GetDirectories" with "1" argument(s): "The path is not of a legal form."
At C:\Temp\removeprofiles.ps1:11 char:9
+         $ProfileFolders = [System.IO.Directory]::GetDirectories("$Pat ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentException

Exception calling "Delete" with "1" argument(s): "The path is not of a legal form."
At C:\Temp\removeprofiles.ps1:24 char:9
+         [System.IO.Directory]::Delete("$Path")
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentException

Exception calling "GetFiles" with "1" argument(s): "The path is not of a legal form."
At C:\Temp\removeprofiles.ps1:10 char:9
+         $Files = [System.IO.Directory]::GetFiles("$Path")
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentException

Exception calling "GetDirectories" with "1" argument(s): "The path is not of a legal form."
At C:\Temp\removeprofiles.ps1:11 char:9
+         $ProfileFolders = [System.IO.Directory]::GetDirectories("$Pat ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentException

Exception calling "Delete" with "1" argument(s): "The path is not of a legal form."
At C:\Temp\removeprofiles.ps1:24 char:9
+         [System.IO.Directory]::Delete("$Path")
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentException

Exception calling "GetFiles" with "1" argument(s): "The path is not of a legal form."
At C:\Temp\removeprofiles.ps1:10 char:9
+         $Files = [System.IO.Directory]::GetFiles("$Path")
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentException

Exception calling "GetDirectories" with "1" argument(s): "The path is not of a legal form."
At C:\Temp\removeprofiles.ps1:11 char:9
+         $ProfileFolders = [System.IO.Directory]::GetDirectories("$Pat ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentException

Exception calling "Delete" with "1" argument(s): "The path is not of a legal form."
At C:\Temp\removeprofiles.ps1:24 char:9
+         [System.IO.Directory]::Delete("$Path")
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentException

Exception calling "GetFiles" with "1" argument(s): "The path is not of a legal form."
At C:\Temp\removeprofiles.ps1:10 char:9
+         $Files = [System.IO.Directory]::GetFiles("$Path")
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentException

Exception calling "GetDirectories" with "1" argument(s): "The path is not of a legal form."
At C:\Temp\removeprofiles.ps1:11 char:9
+         $ProfileFolders = [System.IO.Directory]::GetDirectories("$Pat ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentException

Exception calling "Delete" with "1" argument(s): "The path is not of a legal form."
At C:\Temp\removeprofiles.ps1:24 char:9
+         [System.IO.Directory]::Delete("$Path")
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentException

Open in new window

I'd need to know what is in the variable. Can I see it ? teamviewer maybe?
what is the path you're looking form? it is supposed to run in a local path. are you running it in a network path (\\server\folder) ?
ASKER CERTIFIED SOLUTION
Avatar of ivan rosa
ivan rosa
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
You will still delete admin profiles because admin could have been renamed or suffixed with a .COMPUTERNAME or a .DOMAINNAME.

I suggest you enumerate HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
this is best to put in practice with folders within folders while voiding targets. thought i would really advise to test it first make sure if it's used for profiling to make sure, Temporary profile doesn't pop up...