Автоматизация Jenkins с помощью сценария PowerShell в AD - PullRequest
0 голосов
/ 09 июля 2020

Я пытаюсь использовать этот скрипт ниже в jenkins, но получаю сообщение об ошибке:

Ошибка:

Running as SYSTEM
Building in workspace C:\Program Files (x86)\Jenkins\workspace\Move_Disable_Inactive_Computers
[Move_Disable_Inactive_Computers] $ powershell.exe -NonInteractive -ExecutionPolicy Bypass -File C:\Windows\TEMP\jenkinsxxxxxxxxxxxxxxx.ps1
Disable-ADAccount : Insufficient access rights to perform the operation
At C:\Windows\TEMP\jenkins8240077775170239915.ps1:14 char:19
+ $StaleComputers | Disable-ADAccount
+                   ~~~~~~~~~~~~~~~~~

Скрипт :

Import-Module ActiveDirectory

$ErrorActionPreference = 'Stop'
$Password = $env:Password | ConvertTo-SecureString -AsPlainText -Force
$credentials = New-Object System.Management.Automation.PSCredential -ArgumentList $env:UserName, $Password

$DaysInactive = 45
$DestinationOU = "OU=test,OU=test,DC=test,DC=test"
$time = (Get-Date).Adddays(-($DaysInactive))

$StaleComputers = Get-ADComputer -Filter {LastLogonTimeStamp -lt $time} -ResultPageSize 2000 -resultSetSize $null -Properties LastLogonTimeStamp 
$StaleComputers | Export-CSV C:\Inactive_Disabled_Computers_list_$((Get-Date).ToString('MM-dd-yyyy')).csv -NoTypeInformation -Encoding UTF8
$StaleComputers | Disable-ADAccount
$StaleComputers | %{ Move-ADObject -Identity $_.DistinguishedName -TargetPath $DestinationOU }

Если я прокомментирую 2 последние строки команд, сценарий работает, но все еще отсутствует, чтобы сделать именно то, что мне нужно, отключить и переместить.

1 Ответ

1 голос
/ 12 июля 2020

Хорошо, я не уверен, что это будет наиболее правильный способ объяснения, но я решил это с помощью следующих шагов: Я установил плагин «Авторизовать проект» в Configuration Global Security / Security Realm, я выбрал Active Directory (вставить все варианты для моей AD). Затем в «Контроль доступа к сборкам» я выбрал «Запуск от имени пользователя, запустившего сборку».

Затем я изменил свой сценарий, теперь он выглядит так, и все работает.

    Import-Module ActiveDirectory
    
    $ErrorActionPreference = 'Stop'
    $Password = $env:Password | ConvertTo-SecureString -AsPlainText -Force
    $credentials = New-Object System.Management.Automation.PSCredential -ArgumentList $env:UserName, $Password
    
    Invoke-Command -ComputerName $env:HostName -Credential $credentials -ScriptBlock {
    $ou = "DC=domain,DC=com"
    $DestinationOU = "OU=test,DC=domain,DC=com"
    $DaysInactive = 45
    $time = (Get-Date).Adddays(-($DaysInactive))

# path to the log file
$logpath = "C:\test_$((Get-Date).ToString('MM-dd-yyyy')).csv"
$findcomputers = Get-ADComputer -Filter {LastLogonTimeStamp -lt $time} -ResultPageSize 2000 -resultSetSize $null -Properties LastLogonTimeStamp
# Create a CSV containg all the Stale Computer Information
$findcomputers | export-csv $logpath
# Disable the Stale Computer Accounts
#$findcomputers | set-adcomputer -Description $description –passthru | Disable-ADAccount
$findcomputers | Disable-ADAccount
# Find all the Stale Computer Accounts we just disabled
$disabledAccounts = Search-ADAccount -AccountDisabled -ComputersOnly -SearchBase $ou
# Move the Disabled accounts to $disabledOU
$disabledAccounts | Move-ADObject -TargetPath $DestinationOU
}
...