Powershell: Windows 서비스를 사용하여 텍스트 파일에서 보안 문자열을 읽는 방법

Powershell: Windows 서비스를 사용하여 텍스트 파일에서 보안 문자열을 읽는 방법

Powershell을 사용하여 vSphere 환경의 자격 증명을 텍스트 파일에 저장했습니다 ConvertFrom-SecureString. 다음 명령을 사용하여 Powershell 스크립트에서 이 자격 증명을 사용하고 싶습니다.

$password4host = get-content C:\shutdown\HostsCred.txt | convertto-securestring

서비스를 통해 powershell 스크립트를 실행하려고 하면 텍스트 파일에서 자격 증명을 읽을 수 없다는 오류가 발생합니다. 이는 보안 문자열을 텍스트 파일에 저장하는 것이 이러한 자격 증명을 텍스트 파일에 저장한 사용자에게 바인딩된다는 사실에 속하는 것 같습니다. 사용자 자신만이 자격 증명을 해독할 수 있습니다.

코드 조각:

$time = ( get-date ).ToString('HH-mm-ss')
$date = ( get-date ).ToString('dd-MM-yyyy')
$logfile = New-Item -type file "C:\shutdown\ShutdownLog-$date-$time.txt" -Force
Import-Module -Name VMware.*
# Some variables
$vcenter = "10.10.10.10"
$username = "[email protected]"
$username4host = "fakeuser"
$cluster = "ESXi-Cluster"
$datacenter = "Datacenter"
$vCenterVMName = "VMware vCenter Server" #Name of vCenter VM
$StarWindVM1 = "Starwind-VM" #Name of first StarWind VM
$StarWindVM2 = "Starwind-VM (1)" #Name of second StarWind VM
$StarWind = "10.10.10.11" #IP address of one of StarWind VMs
$ESXIhost1 = "10.10.10.12" #Name of first ESXI Host
$ESXIhost2 = "10.10.10.13" #Name of second ESXI Host
try
{
    $password4vCenter = get-content C:\shutdown\vCenterCred.txt | convertto-securestring
}
catch
{
    Write-Host $_ -foreground red
    Add-Content $logfile "$(get-date -f dd/MM/yyyy) $(get-date -f HH:mm:ss) $_"
    exit
}
try
{
    $password4host = get-content C:\shutdown\vCenterCred.txt | convertto-securestring
}
catch
{
    Write-Host $_ -foreground red
    Add-Content $logfile "$(get-date -f dd/MM/yyyy) $(get-date -f HH:mm:ss) $_"
    exit
}
$tmp = get-content C:\Temp\HostsCred.txt | convertto-securestring
$password4Starwind = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($tmp)) 
$credentials = new-object System.Management.Automation.PSCredential $username, $password4vCenter
$credentials4host = new-object System.Management.Automation.PSCredential $username4host, $password4host
Write-Host ""
Write-Host "$(get-date -f dd/MM/yyyy) $(get-date -f HH:mm:ss) Shutdown command has been sent to the vCenter Server." -Foregroundcolor yellow
Write-Host "This script will shutdown all of the VMs and hosts located in $datacenter." -Foregroundcolor yellow
Write-Host ""
Sleep 5
Add-Content $logfile "$(get-date -f dd/MM/yyyy) $(get-date -f HH:mm:ss) PowerOff Script Engaged"
Add-Content $logfile ""
# Connect to vCenter
$counter = 0
if ($counter -eq 0){
       Set-PowerCLIConfiguration -InvalidCertificateAction ignore -Confirm:$false | Out-Null
}
Write-Host "Connecting to vCenter - $vcenter.... " -nonewline
Set-PowerCLIConfiguration -InvalidCertificateAction ignore -confirm:$false
Add-Content $logfile "$(get-date -f dd/MM/yyyy) $(get-date -f HH:mm:ss) Connecting to vCenter - $vcenter"
try
{
    $success = Connect-VIServer $vcenter -Credential $credentials -WarningAction:SilentlyContinue
}
catch
{
    Write-Host $_ -foreground red
    Add-Content $logfile "$(get-date -f dd/MM/yyyy) $(get-date -f HH:mm:ss) $_"
    exit
}

하지만 이미 이 서비스의 로그온 사용자를 암호화된 자격 증명을 저장한 사용자로 변경했습니다. 서비스가 여전히 특정 사용자로 실행되고 있지 않거나 Windows 서비스에서 이러한 보안 문자열을 사용할 수 없는 것 같습니다.

해당 사용자로 로그인한 동안 powershell ISE에서 powershell 스크립트를 실행하면 오류 없이 스크립트가 실행됩니다.

Powershell 스크립트 내에 일반 텍스트로 저장하지 않고 Windows 서비스를 통해 트리거된 Powershell에서 자격 증명을 어떻게 사용할 수 있나요?

특정 사용자를 사용한 Windows 서비스

관련 정보