“o powershell parou de funcionar” na saída do PS após criar o Usuário do IIS

1

Em uma caixa do Windows Server 2012, estou usando o PS para criar um novo usuário do IIS (para implantações automatizadas usando o MSDeploy). O comando em si parece funcionar bem - o usuário é criado - mas assim que saio da sessão do PowerShell (digitando exit ou apenas fechando a janela de comando), é exibida uma caixa de diálogo informando "o powershell parou de funcionar", com os seguintes detalhes:

Problem signature:
  Problem Event Name:   PowerShell
  NameOfExe:    powershell.exe
  FileVersionOfSystemManagementAutomation:  6.2.9200.16628
  InnermostExceptionType:   Runtime.InteropServices.InvalidComObject
  OutermostExceptionType:   Runtime.InteropServices.InvalidComObject
  DeepestPowerShellFrame:   unknown
  DeepestFrame: System.StubHelpers.StubHelpers.GetCOMIPFromRCW
  ThreadName:   unknown
  OS Version:   6.2.9200.2.0.0.400.8
  Locale ID:    1033

Os comandos PS em questão são:

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Web.Management")
[Microsoft.Web.Management.Server.ManagementAuthentication]::CreateUser("Foo", "Bar")

Por que isso está acontecendo e como posso evitá-lo?

EDITAR: Também confirmei que isso seja um problema com o PowerShell 4.0, então adicionei essa tag. Também o enviei em Conecte .

UPDATE: parece que o Windows Server 2012 R2 não tem esse mesmo erro.

    
por Nick Jones 07.04.2014 / 23:08

1 resposta

3

Postagem antiga, mas me deparei com esse problema exato e precisei de ajuda com isso. Espero que esta resposta ajude alguém.

Estava acontecendo comigo no Windows Server 2012 R2 executando o PowerShell 4. Minha solução não é exatamente uma correção real, mas me ajuda do que eu precisava. O que fiz foi colocar essa operação em um "thread" de plano de fundo para que o processo principal não fosse bloqueado pela janela pop-up, indicando que o PowerShell travou. Nota O PowerShell estava apenas falhando para mim quando eu executei um script que fazia isso através do cmd ou do Microsoft Release Management. Ao chamar o script diretamente em uma janela do PowerShell, ele não travou. Mesmo quando estava falhando, tudo o que eu queria que o roteiro fizesse estava sendo executado. Ele só caiu depois que o script terminou.

Aqui está um pouco do meu código

param($password)

$jobScript = {
Try
{
    <# Clear the $Error variable so errors do not build up when debugging this script #>
    $Error.Clear()

    $userName = "SomeUser"

    If([ADSI]::Exists("WinNT://./$userName"))
    {
        Add-Type -Path "C:\windows\system32\inetsrv\Microsoft.Web.Management.dll"
        Add-Type -Path "C:\windows\system32\inetsrv\Microsoft.Web.Administration.dll"

        <# Set IIS Permissions on Default Web Site #>
        Try
        {
            $errorMessage = "Error setting IIS Permissions on Default Web Site for $userName"
            [Microsoft.Web.Management.Server.ManagementAuthorization]::Grant("$userName", "Default Web Site", $false)
            Write-Output "IIS Permissions set on Default Web Site for $userName"
        }
        Catch <# Tried catching the specific exception thrown, but was not working #>
        {
            Write-Output "IIS Permissions already set on Default Web Site for $userName"
        }
    }
    Else
    {
        $errorMessage = "The SomeUser user must be created prior to running this script"
        Write-Output $errorMessage
        Throw $errorMessage
    }
}
Catch
{
    # Signal failure to Microsoft Release Management
    Write-Error "$errorMessage - $Error"
}
}

$job = Start-Job $jobScript
Wait-Job $job
Receive-Job $job
    
por 05.05.2016 / 16:12