ivan rosa
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?
or if anybody has a a batch that'd be great too
Thanks for looking
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"
}
}
or if anybody has a a batch that'd be great too
Thanks for looking
Just a question... Why not use the GPO or registry settings to automatically delete old user profiles?
https://social.technet.microsoft.com/wiki/contents/articles/28647.how-to-automatically-delete-user-profiles-older-than-a-certain-number-of-days-using-group-policy.aspx
https://www.experts-exchange.com/articles/31021/UserResourceCleanup.html
https://social.technet.microsoft.com/wiki/contents/articles/28647.how-to-automatically-delete-user-profiles-older-than-a-certain-number-of-days-using-group-policy.aspx
https://www.experts-exchange.com/articles/31021/UserResourceCleanup.html
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
@shaun, GPO would it sounded good, thought this project is a temporary ...
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
@shaun, GPO would it sounded good, thought this project is a temporary ...
ASKER
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"
}
}
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"
}
}
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.
ASKER
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
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) ?
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
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
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\SOFTWAR E\Microsof t\Windows NT\CurrentVersion\ProfileL ist
I suggest you enumerate HKEY_LOCAL_MACHINE\SOFTWAR
ASKER
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...
Open in new window