2012-02-11 3 views
3

"full"のリモートランスペースを許可するようにIISを設定したとしますが、Powershellが "%"が見つからないと判断した場合の例外を解決する方法を教えてください。PowerShellには、 '%'と '新規オブジェクト'が見つかりません。輸入がありませんか? WinRM、またはExchangeの役割のアクセス許可?

次に、問題のfor..eachステートメントをコメントアウトすると、New-Objectが見つかりません。

インポートがありません。コメントに基づいて、WinRMの一部の構成やExchange 2010の役割のアクセス許可が不足している可能性があります。

public static void testExchangeMBScript() 
{ 
    PSCredential credential = new PSCredential(@"domain\me", createPassword("pw")); 

WSManConnectionInfo connectionInfo = new WSManConnectionInfo(false, "exchangehost.company.com", 80, "/Powershell", "http://schemas.microsoft.com/powershell/Microsoft.Exchange", credential); 

connectionInfo.AuthenticationMechanism = AuthenticationMechanism.Default; 

Runspace runspace = System.Management.Automation.Runspaces.RunspaceFactory.CreateRunspace(connectionInfo); 

try 
{ 
    runspace.Open(); 
    Pipeline pipeline = runspace.CreatePipeline(); 

    string ps1 = "Get-MailboxDatabase -Status"; 
    string PSFull = @" $Databases = Get-MailboxDatabase -Status 
    foreach($Database in $Databases) { 
     $DBSize = $Database.DatabaseSize 
     $MBCount = @(Get-MailboxStatistics -Database $Database.Name).Count 

     $AllMBStats = Get-MailboxStatistics -Database $Database.Name  
    $MBItemAssocCount = $AllMBStats | %{$_.AssociatedItemCount.value} | Measure-Object -Average -Sum 
    $MBDeletedCount = $AllMBStats | %{$_.DeletedItemCount.value} | Measure-Object -Average -Sum 
    $MBItemCount =  $AllMBStats | %{$_.ItemCount.value} | Measure-Object -Average -Sum 
    $MBDeletedItemSize= $AllMBStats | %{$_.TotalDeletedItemSize.value.ToMb() } | Measure-Object -Average -Sum 
    $MBItemSize =  $AllMBStats | %{$_.TotalItemSize.value.ToMb()} | Measure-Object -Average -Sum  

     New-Object PSObject -Property @{ 
Server = $Database.Server.Name 
DatabaseName = $Database.Name 
UserCount = $MBCount 
""DatabaseSize (GB)"" = $DBSize.ToGB() 
""AverageMailboxSize (MB)"" = $MBItemSize.Average 
""WhiteSpace (MB)"" = $Database.AvailableNewMailboxSpace.ToMb() 
ItemCount = $MBItemCount.Sum 
""LogicalSize (MB)"" = $MBItemSize.Sum 
     } 
    } 
"; 
    pipeline.Commands.AddScript(PSFull); 



    // This method cannot be called multiple times on a given pipeline. The state of the 
    // pipeline must be NotStarted when Invoke is called. When this method is called, it 
    // changes the state of the pipeline to Running. 
    // see http://msdn.microsoft.com/en-us/library/windows/desktop/ms569128(v=vs.85).aspx 
    if (pipeline.PipelineStateInfo.State == PipelineState.NotStarted) 
    { 
     Collection<PSObject> results = pipeline.Invoke(); 
    } 
} 
catch (RemoteException re) 
{ 

    // if: Assignment statements are not allowed in restricted language mode or a Data section. 
    // then: configure IIS application settings PSLanguageMode = FullLanguage 
} 
catch (Exception e) 
{ 

} 
     } 
+0

は '%は' 'のForEach-オブジェクトの別名であります'コマンドレット。完全なコマンドレット名を入力すると動作しますか? –

+0

これを変更すると、「ForEach-Object」という用語が、コマンドレット、関数、スクリプトファイル、または実行可能プログラムの名前として認識されないという例外があります。 – LamonteCristo

+0

これらのリモートセッションはforeach-オブジェクト。それらをforeachループに変更すると、よりうまくいくと思います。 – mjolinor

答えて

1

リモートセッションは拘束されたランスペースです。スクリプトで使用したいコマンドレットを使用することはできません。私はあなたがする必要があると信じられていないローカルのrunspaceを使用して、そこからinvokeコマンドを使用してリモート管理スペースでExchange管理コマンドレットを実行します:

$ AllMBStats = invoke-command {Get-MailboxStatistics -Database $ databasename} -argumentlist $ database.name -connectionuri "http://exchangehost.company.com/powershell"

それから、ローカルのランスペースのリターンで作業してください。

+0

C#/ Powershellを使用して制約のないリモートのリモートスペースに接続する方法の違いを理解できますか? – LamonteCristo

+0

リモートの拘束されていないランスペースに接続できるのは、それを提供するマシンがある場合のみです。私はC#を使用しないので、PowerShellを使用するだけでローカルマシン上でPowerShellセッションを開き、そこからExchangeServerを指すconnectionuriを使用してinvokeコマンドを実行しますリモートセッションを使用してExchangeコマンドレットを実行し、返された値に基づいて平均を計算したり、ローカルセッションでカスタムオブジェクトを作成したりするだけです。 – mjolinor

+0

[このIIS Powershellの設定関連](http://security.stackexchange.com/q/11601/396)は、あなたが話していることに? ...詳細については、IISリンクをクリックしてください – LamonteCristo