PS |

Я буквально на 1 линии от завершения этой задачи PS. Один из вас возражал бы взглянуть? Этот скрипт просто проверяет каталог пользователей, проверяет дату создания каждого локального пользователя и удаляет его с помощью WMIObject. Все работает до строки 34 (помечено ===> в блоке кода). Ошибка в моем WMI Query. Я не могу понять, почему ... Работа с WMIExplorer выглядит правильно.

$Admin = "Administrator"

foreach($file in Get-ChildItem C:Users)
{
    if ($file -in $Admin)

        {
            Write-Host = "`r`nUser account is" $file ". This is an Administrator Account, it will not be deleted."
        }

    else

        {

            Write-Host = "`r`nUser account is" $file ". Checking profiles age..."
            $FileDate = (Get-item C:Users$file).CreationTime
            Write-Host = $FileDate 
            $TestDate = (Get-Date).addDays(-30)
            Write-Host = $TestDate

        If ($FileDate -lt $TestDate)

            {
                Write-Host = "Since" $file "is older than 30 Days (" $FileDate ") it will be deleted."
                $UserAccountPath = "C:Users$file"
     ====>      $WMIQuery = "SELECT * FROM Win32_UserProfile WHERE localpath = $UserAccountPath"
                $UserProfile = Get-WmiObject -Query $WMIQuery -ComputerName $Computer
                Remove-WmiObject -InputObject $UserProfile 

            }

        else

            {
                Write-Host = "Since File is dated less than 30 days old (" $FileDate ") it will not need to be deleted."
            }

        }

}

Когда он запускается, я получаю следующую ошибку:

Get-WmiObject : Invalid query "SELECT * FROM Win32_UserProfile WHERE localpath = C:Users
adconrm"
At C:UsersAVC00DocumentsPowerShellProfile MaintenanceTestCommands.ps1:18 char:13
+ $profile = (Get-WmiObject -Query $WMIQuery -ComputerName $Computer)
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Get-WmiObject], ManagementException
    + FullyQualifiedErrorId : GetWMIManagementException,Microsoft.PowerShell.Commands.GetWmiObjectCommand

Remove-WmiObject : Cannot bind argument to parameter 'InputObject' because it is null.
At C:UsersAVC00DocumentsPowerShellProfile MaintenanceTestCommands.ps1:19 char:31
+ Remove-WmiObject -InputObject $profile
+                               ~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Remove-WmiObject], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.RemoveWmiObject

Я с нетерпением жду вашего понимания! Спасибо за ваше время заранее!

Всего 1 ответ


Удвойте обратную косую черту. Добавьте кавычки тому, чему равен localpath. Это как SQL.

$UserAccountPath = "C:\Users\$file"
$WMIQuery = "SELECT * FROM Win32_UserProfile WHERE localpath = '$UserAccountPath'"
$UserProfile = Get-WmiObject -Query $WMIQuery -ComputerName $Computer

Вы можете найти что-то вроде этого проще:

get-wmiobject win32_userprofile | where localpath -eq c:users$file

Есть идеи?

10000