我正在使用System.Management.Automation
命名空间,以便在C#.NET程序中使用powershell。
但是,根据http://technet.microsoft.com/en-us/library/ee662309.aspx Add-WindowsFeature
返回Microsoft.Windows.ServerManager.Commands.FeatureOperationResult
类型。
此对象在MSDN上未记录,但我能够使用PowerShell和Get-Member
命令检索其成员。
PS C:\Users\Administrator> $RES[0] | Get-Member
TypeName: Microsoft.Windows.ServerManager.Commands.FeatureOperationResult
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
ExitCode Property Microsoft.Windows.ServerManager.Commands.FeatureOperationExitCode ExitCode {get;}
FeatureResult Property Microsoft.Windows.ServerManager.Commands.FeatureResult[] FeatureResult {get;}
RestartNeeded Property Microsoft.Windows.ServerManager.Commands.RestartState RestartNeeded {get;}
Success Property System.Boolean Success {get;}
现在我想在C#中使用这种类型,但为此我需要拥有具有此命名空间的库。我只能找到
C:\Windows\winsxs\amd64_microsoft.windows.servermanager_31bf3856ad364e35_6.1.7601.17514_none_c70b231167ed6fc3
Microsoft.Windows.ServerManager.dll
所在的目录。这个库可以在visual studio中引用,但它的命名空间不包含.Commands
命名空间(?)类(?)
答案 0 :(得分:0)
我发现了。为了能够使用Add-WindowsFeature
,您必须首先导入名为ServerManager
的服务器模块。此服务器模块位于
C:\Windows\System32\WindowsPowerShell\v1.0\Modules\ServerManager
目录。在同一目录中,ServerManager.psd1
文件包含行
NestedModules = 'Microsoft.Windows.ServerManager.PowerShell'
如果您搜索Microsoft.Windows.ServerManager.PowerShell.dll
库。你应该找到它的一个实例,这个实例包含我在问题中提到的.Commands
命名空间。
答案 1 :(得分:0)
相关DLL的名称和位置是实现细节,可能会在发行版之间发生变化。我发现在PowerShell结果中处理结构化对象的最简单方法是使用C#“动态”功能。例如:
public bool FeatureIsInstalled(string name)
{
bool result = false;
using (Pipeline pipeline = runspace.CreatePipeline(
string.Format("Get-WindowsFeature '{0}'", name)))
{
Collection<PSObject> output = pipeline.Invoke();
if (output.Count > 0)
{
dynamic o1 = output[0];
result = (bool)o1.Installed;
}
}
return result;
}