2016-09-15 3 views
0

J'ai un dilema. J'essaie de configurer une tâche planifiée dans Windows qui exécute un script PowerShell en tant qu'un autre utilisateur (un compte de service qui a accès mais pas de droits de connexion). Le problème est que notre groupe de sécurité nous a dit de ne pas coder dans les mots de passe (évidemment de bons conseils) mais la chaîne de connexion pour le SQL semble en avoir besoin en texte brut. Je reçois autour de cela en créant un fichier de mot de passe:Powershell et exécuter la tâche planifiée comme autre utilisateur

$credential = Get-Credential 
$credential.Password | ConvertFrom-SecureString | Set-Content e:\temp\password.txt 

Et puis dans le script reconvertissant en texte brut (à utiliser dans une chaîne de connexion)

$password = cat E:\temp\password.txt | ConvertTo-SecureString 
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($password) 
$UnsecurePassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR) 

$connectionString = "Data Source=<mydatabase>;Initial Catalog='<mytable>';User ID=tng ;Password=$Unsecurepassword;" 

Le hic, cependant, est Lorsque je crée le fichier de mot de passe et exécute le script comme moi-même, cela fonctionne très bien, mais je n'arrive pas à l'exécuter en tant que tâche planifiée. Dans les expériences passées, j'ai vu où le fichier de mot de passe avait probablement besoin d'être créé par le compte de service exécutant la tâche planifiée, mais sans droits de connexion locaux, je ne suis pas sûr de savoir comment le créer. Des pensées?

J'ai essayé this technet article mais il semble qu'il nécessite toujours une connexion locale de l'autre compte.

+0

Eh bien, je pense que je pourrais avoir quelque chose [li nk] (http://www.adminarsenal.com/admin-arsenal-blog/secure-password-with-powershell-encrypting-credentials-part-2/) – jdolluc

Répondre

0

a trouvé la réponse - je besoin d'ajouter une clé de la chaîne sécurisée:

Lors de la création du fichier - ajouter dans la clé de $:

[byte[]] $key = (1..16) 
$credential = Get-Credential 
$credential.Password | ConvertFrom-SecureString -key $key | Set-Content e:\temp\password.txt 

Et puis en lisant le dans:

$passwordfile = "E:\temp\password.txt" 
[byte[]] $key = (1..16) 
$securePassword = Get-Content $passwordfile | ConvertTo-SecureString -Key $key 
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($securepassword) 
$UnsecurePassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR) 

réponse trouvée grâce à this link