"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)
{
}
}
は '%は' 'のForEach-オブジェクトの別名であります'コマンドレット。完全なコマンドレット名を入力すると動作しますか? –
これを変更すると、「ForEach-Object」という用語が、コマンドレット、関数、スクリプトファイル、または実行可能プログラムの名前として認識されないという例外があります。 – LamonteCristo
これらのリモートセッションはforeach-オブジェクト。それらをforeachループに変更すると、よりうまくいくと思います。 – mjolinor