2015-11-18 1 views
1

J'ai un script PowerShell qui exécute une requête SQL à partir d'un serveur Windows Server 2008 R2; Lorsque vous êtes connecté au serveur avec un compte administrateur/service de domaine, le script s'exécute et se termine à partir de PS et d'ISE de base. Si je planifie le même script en utilisant le même compte Administrateur/Service du planificateur de tâches, la requête ne renvoie aucune valeur. La tâche planifiée s'exécute comme 'Exécuter avec les privilèges les plus élevés'. PowerShell est V4.La valeur nulle de la tâche planifiée est renvoyée par sqlcmd dans PowerShell

$Result = Invoke-Sqlcmd -ServerInstance Server -Database Database -Query $Query 

Où lancez le manuellement $Result retourne toujours une valeur et encore de la Tâche $Result planifiée est toujours nulle. Dans les deux cas, le reste du script s'exécute correctement et se termine.

+0

interceptez votre sortie d'erreur dans un fichier et mettez à jour votre question avec l'erreur. Mes premières réflexions sont que cette session est liée à une session utilisateur, vous devrez peut-être utiliser une session authentifiée. – Colyn1337

+0

D'après les sons, cela ne semble pas être un échec, donc je ne pense pas qu'il y ait une erreur à capturer. A moins que le '$ ErrorActionPreference' ait été défini dans ce script, ce qui serait utile à savoir. Peut-être juste ne rien retourner? Peut-être dans la façon dont '$ query' est généré .... Je ne sais pas avec certitude. – Matt

+0

Merci pour les pensées, en règle générale lors du développement d'un script, j'ajoute une ligne Add-Content $ Location $ Variable sous toutes les actions possibles pour que je puisse suivre la logique dans un fichier texte, c'est très utile et dans ce cas pour moi courant manuellement je «vois» une sortie contre les variables en question cependant la tâche de programme renvoie un vide. –

Répondre

0

Voici la 'résolution' bien que cela ressemble vraiment à une triche. J'ai essayé différentes méthodes de déclenchement pour démarrer le script; d'abord un fichier .bat qui a également couru de manière exaspérante lors du démarrage manuel, mais a également échoué lors de la planification. Ensuite, j'ai écrit un simple script .vbs pour démarrer le script PowerShell qui fonctionnait manuellement et cela, au moins, fonctionnait correctement depuis le planificateur ... Je ne peux pas l'expliquer ...

0

Littéralement fait face aujourd'hui. Le résultat de cette requête est du type System.Data.Datarow. Je suppose que vous entrez simplement $Result dans la console/ISE? PowerShell est sympa et fait une conversion à la volée. Essayez Write-Host "$Result" et vous devriez voir System.Data.Datarow au lieu de vos résultats.

La question devient alors où convertir cette System.Data.Datarow en. Cela dépend vraiment du reste de votre code (et ce n'est pas mon point fort). Exemples paresseux ci-dessous.

$Results | Out-file ".\Results.txt" 
$csv = ConvertTo-Csv $Results 
+0

Merci pour les pensées, je sais que la requête renvoie deux colonnes dans le résultat et ma ligne suivante est $ Col1 = $ Result.Col1 et ainsi de suite qui est rempli lorsque je cours manuellement et vide lorsque prévu. –

+0

Heureux de vous aider. Hmm je vois; Je m'attendais à ce que le run programmé renvoie aussi $ Results mais sous une forme différente (mes anologues $ Result.Col1 n'est pas vide) Commenté ci-dessus concernant l'erreur Invoke-Sqlcmd. – gms0ulman