| out-file
最後の「}」と同じ行に行を追加していますか、それとも別の行に追加していますか? 「|」がある場合 新しい行の最初の非空白文字として、前の改行をエスケープする必要があります。そうしないと、「空のパイプ要素」エラーが発生します。
コードは次のようになります (最後から 2 行目の「}」の後のバッククォートに注意してください)。
Param(
[string]$clusterName
)
Import-Module failoverclusters
get-cluster -name $clusterName | get-clusterresource | where-object {
$_.ResourceType.name -eq "SQL Server"
} |
%{
$virtualServerName = get-clusterparameter -InputObject $_ VirtualServerName;
$instanceName = get-clusterparameter -InputObject $_ InstanceName;
$nodeName = $_.OwnerNode;
$IPAddress = [System.Net.Dns]::GetHostAddresses($virtualServerName.Value) | where-object {$_.IsIPv6LinkLocal -eq $False}
echo ("{0},{1}\{2},{3},{4},{5},{6}" -f $nodeName,$virtualServerName.Value, $instanceName.Value,$virtualServerName.Value,$instanceName.Value,$IPAddress,$clusterName);
} `
| out-file -filepath "D:\Path\To\File\ClusterInstances.txt" -Encoding ASCII -append
または、これは、上記の方がよりエレガントだと思いますが:
Param(
[string]$clusterName
)
Import-Module failoverclusters
get-cluster -name $clusterName | get-clusterresource | where-object {
$_.ResourceType.name -eq "SQL Server"
} |
%{
$virtualServerName = get-clusterparameter -InputObject $_ VirtualServerName;
$instanceName = get-clusterparameter -InputObject $_ InstanceName;
$nodeName = $_.OwnerNode;
$IPAddress = [System.Net.Dns]::GetHostAddresses($virtualServerName.Value) | where-object {$_.IsIPv6LinkLocal -eq $False}
echo ("{0},{1}\{2},{3},{4},{5},{6}" -f $nodeName,$virtualServerName.Value, $instanceName.Value,$virtualServerName.Value,$instanceName.Value,$IPAddress,$clusterName);
} | out-file -filepath "D:\Path\To\File\ClusterInstances.txt" -Encoding ASCII -append
実際、使用しているスタイルに合わせて、以下も機能するはずです。
Param(
[string]$clusterName
)
Import-Module failoverclusters
get-cluster -name $clusterName | get-clusterresource | where-object {
$_.ResourceType.name -eq "SQL Server"
} |
%{
$virtualServerName = get-clusterparameter -InputObject $_ VirtualServerName;
$instanceName = get-clusterparameter -InputObject $_ InstanceName;
$nodeName = $_.OwnerNode;
$IPAddress = [System.Net.Dns]::GetHostAddresses($virtualServerName.Value) | where-object {$_.IsIPv6LinkLocal -eq $False}
echo ("{0},{1}\{2},{3},{4},{5},{6}" -f $nodeName,$virtualServerName.Value, $instanceName.Value,$virtualServerName.Value,$instanceName.Value,$IPAddress,$clusterName);
} |
out-file -filepath "D:\Path\To\File\ClusterInstances.txt" -Encoding ASCII -append
肝心なのは「|」です。前の改行をエスケープしない限り、最初の文字にすることはできません。これは、新しいコマンドとして解釈され、最初のパイプ要素が欠落しているため、「空のパイプ要素」エラーが発生するためです。