Je connais les travaux PowerShell, mais je veux utiliser start-process et passer un objet sérialisable au nouveau processus powershell. Est-ce qu'il y a un moyen de faire ça?Existe-t-il un moyen de transmettre des objets sérialisables à un script PowerShell avec un processus de démarrage?
Il semble qu'en utilisant le processus de démarrage, vous devez fournir une liste d'arguments de chaîne qui ne me le coupera pas. J'essaie d'obtenir un PSCredential d'un processus à un autre (ou un SecureString, je prends l'un ou l'autre). Peut-être que cela contourne la sécurité.
MISE À JOUR - ajout de la solution je après avoir vu l'aide des autres (en utilisant une solution de @PetSerAl)
j'ai écrit deux scripts de test: un script parent et un script enfant. Le script parent appelle le script enfant.
Parent Scénario:
$securePassword = ConvertTo-SecureString "testpassword" -AsPlainText -Force
$cred = New-Object PSCredential("testuser", $securePassword)
$credSerial = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes([Management.Automation.PSSerializer]::Serialize($cred)))
$psFile = "C:\repos\Test\PowerShell Scripts\KirkTestChild.ps1"
$p1 = "-someparam ""this is a test!!!"""
$p2 = "-cred ""$credSerial"""
$proc = Start-Process PowerShell.exe -PassThru:$true -Argument "-File ""$($psFile)""", $p1, $p2
Write-Host "ID" $proc.Id
Write-Host "Has Exited" $proc.HasExited
Start-Sleep -Seconds 15
Write-Host "Has Exited" $proc.HasExited
Script Enfant:
Param(
$someParam,
$cred
)
Write-Host "someParam: $($someParam)"
Write-Host "cred (raw): $($cred)"
$realCred=[Management.Automation.PSSerializer]::Deserialize([Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($cred)))
Write-Host "cred user: $($realCred.UserName)"
Write-Host "start"
Start-Sleep 5
Write-Host "ending"
Start-Sleep 5
'$ b = [Convert] :: ToBase64String ([Text.Encoding] :: UTF8.GetBytes ([Management.Automation.PSSerializer] :: Serialize ($ a)))' '$ c = [ Management.Automation.PSSerializer] :: Désérialiser ([Text.Encoding] :: UTF8.GetString ([Convert] :: FromBase64String ($ b))) '' – PetSerAl
Excellente approche, PetSerAl !!! Je vais essayer ça bientôt. –