2013-01-17 2 views
2

J'ai créé un petit site qui crée de manière pragmatique des enregistrements DNS NS. Quand j'exécute mon code en PS (sur mon serveur site.com) cela fonctionne parfaitement, mais quand je le lance depuis le site web (hébergé sur mon serveur site.com) il échoue avec l'erreur: "Erreur de création d'IP 1.1.1.1. erreur: Impossible d'obtenir les informations de zone pour site.com sur le serveur myServer »Échec du script C# Powershell: "Impossible d'obtenir les informations de zone"

Mon script PS est:

Add-DnsServerZoneDelegation site.com –childzonename lab00012 –IPAddress 1.1.1.1 –nameserver 1.1.1.1 

Mon code C# est:

var labString = "lab" + tenantString; 
var scriptText = "Add-DnsServerZoneDelegation site.com –childzonename " + labString 
      + " –IPAddress " + ipAddress + " –nameserver " + ipAddress; 
using (var runspace = RunspaceFactory.CreateRunspace()) 
{ 
    runspace.Open(); 
    Pipeline pipeline = runspace.CreatePipeline(); 
    pipeline.Commands.AddScript(scriptText); 
    var results = pipeline.Invoke();; 
} 

J'ai confirmé que la le site exécutera des commandes PS telles que

Get-WmiObject Win32_BIOS -Namespace 'root\\CIMV2' -computername . 

sans problème.

La version de Powershell est 3.0, le serveur est Windows Server 2012 exécutant IIS 6.2.

Toute aide est grandement appréciée, merci d'avance.

+0

Quel est l'exécution de votre code sous IIS? Quelles autorisations sont différentes de votre console Powershell? – D3vtr0n

+0

Je ne sais pas, je suppose que tous les défauts sont. Ce n'est que la deuxième fois que j'utilise IIS, donc tout ce que j'ai fait, c'est créer un site web et augmenter les fichiers. Désolé, IIS et powershell sont assez nouveaux pour moi. – Sabe

Répondre

1

J'ai trouvé que Power Shell avait besoin d'autorisations améliorées pour apporter des modifications au DNS (et aux dossiers et fichiers associés). Après quelques recherches, je me suis retrouvé à l'aide de ce code:

pipeline.Commands.AddScript("$pw= convertto-securestring 'adminPassword' -asplaintext –force"); 
pipeline.Commands.AddScript("$user = New-Object Management.Automation.PSCredential('machine\\Administrator', $pw)"); 
pipeline.Commands.AddScript("Invoke-Command -ComputerName . -Credential $user -ScriptBlock {"+scriptText+"}"); 

Je reconnais que le codage en dur mon mot de passe admin est mauvaise forme, mais le temps était compté et je ne pouvais pas trouver une meilleure solution.

Si quelqu'un d'autre a une meilleure solution, je suis ouvert à cela.

Questions connexes