- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在过去的一个月里,我一直在尝试学习一些 C#,目的是编写一些 PowerShell 模块。我看了一些articles和 documentation (使用 C# 创建客户端 - Microsoft.Management.Infrastructure)尝试将一个简单的 CIM cmdlet 放在一起,它将返回本地网络适配器。
类库编译正常,但是当我在 PowerShell 中运行命令时,它显示格式异常。
Show-LocalAdapter : Input string was not in a correct format.
在基于函数的问题中,我通常会在错误报告中看到一行问题,但错误并没有用 cmdlet 为我指明正确的方向。
希望这里有人可以帮助我,因为我已经用尽了我在调试这个问题方面的有限知识。
这是 cmdlet 的代码。
using System.Collections;
using System.Linq;
using System.Management.Automation;
using System.Text.RegularExpressions;
using Microsoft.Management.Infrastructure;
namespace NetTest
{
[Cmdlet(VerbsCommon.Show, "LocalAdapter")]
[OutputType(typeof(NetworkAdapter))]
public class ShowLocalAdapterCmdlet : PSCmdlet
{
private string[] _manufacturer;
private string _name;
private bool? _physicalAdapter;
private int _maxEntries = 100;
[Parameter(Position = 0, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true)]
[Alias("Vendor")]
public string[] Manufacturer
{
get { return this._manufacturer; }
set { _manufacturer = value; }
}
[Parameter(Position = 1, ValueFromPipelineByPropertyName = true)]
public string Name
{
get { return this._name; }
set { _name = value; }
}
[Parameter(Position = 2, ValueFromPipelineByPropertyName = true)]
public bool? PhysicalAdapter
{
get { return this._physicalAdapter; }
set { _physicalAdapter = value; }
}
[Parameter(Position = 3)]
public int MaxEntries
{
get { return this._maxEntries; }
set { _maxEntries = value; }
}
protected override void BeginProcessing()
{
base.BeginProcessing();
}
protected override void ProcessRecord()
{
CimSession session = CimSession.Create("localHost");
IEnumerable cimResults = session.QueryInstances(@"root\cimv2", "WQL", "SELECT * FROM Win32_NetworkAdapter");
var query = cimResults.Cast<CimInstance>().Select(ReturnNetworkAdapter);
// Filter Name
if (Name != null)
{
query = query.Where(adapter => adapter.Name != null && adapter.Name.StartsWith(Name));
}
// Manufacturer Filter
if (Manufacturer != null)
{
query = query.Where(
adapter =>
adapter.Manufacturer != null &&
Regex.IsMatch(adapter.Manufacturer.ToString(),
string.Format("^(?:{0})", string.Join("|", Manufacturer))));
}
// Physical Adapter: true or false
if (PhysicalAdapter != null)
{
query = query.Where(adapter =>
adapter.PhysicalAdapter == PhysicalAdapter);
}
// Return objects
query.Take(MaxEntries).ToList().ForEach(WriteObject);
}
private static NetworkAdapter ReturnNetworkAdapter(CimInstance item)
{
return new NetworkAdapter
{
Name = item.CimInstanceProperties["Name"].ToString(),
Description = item.CimInstanceProperties["Description"].ToString(),
DeviceId = int.Parse(item.CimInstanceProperties["DeviceId"].ToString()),
Manufacturer = item.CimInstanceProperties["Manufacturer"].ToString(),
NetConnectionId = item.CimInstanceProperties["NetConnectionId"].ToString(),
PhysicalAdapter = bool.Parse(item.CimInstanceProperties["PhysicalAdapter"].ToString())
};
}
}
}
这是网络适配器对象的类。
namespace NetTest
{
public class NetworkAdapter
{
private string _name;
private string _description;
private int _deviceId;
private string _manufacturer;
private string _netConnectionId;
private bool _physicalAdapter;
public string Name
{
get { return _name; }
set { _name = value; }
}
public string Description
{
get { return _description; }
set { _description = value; }
}
public int DeviceId
{
get { return _deviceId; }
set { _deviceId = value; }
}
public string Manufacturer
{
get { return _manufacturer; }
set { _manufacturer = value; }
}
public string NetConnectionId
{
get { return _netConnectionId; }
set { _netConnectionId = value; }
}
public bool PhysicalAdapter
{
get { return _physicalAdapter; }
set { _physicalAdapter = value; }
}
}
}
最佳答案
像这样的调用 item.CimInstanceProperties["Name"].ToString()
不是您所期望的。您应该查看属性 Value
:
private static NetworkAdapter ReturnNetworkAdapter(CimInstance item)
{
return new NetworkAdapter
{
Name = item.CimInstanceProperties["Name"].Value.ToString(),
Description = item.CimInstanceProperties["Description"].Value?.ToString(),
DeviceId = int.Parse(item.CimInstanceProperties["DeviceId"].Value.ToString()),
Manufacturer = item.CimInstanceProperties["Manufacturer"].Value?.ToString(),
NetConnectionId = item.CimInstanceProperties["NetConnectionId"].Value?.ToString(),
PhysicalAdapter = bool.Parse(item.CimInstanceProperties["PhysicalAdapter"].Value.ToString())
};
}
关于c# - 如何解决此 cmdlet 中输入字符串的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56600578/
我正在通过继承 PSCmdlet 在 C# 中编写 Powershell cmdlet。这是包含二进制和脚本组件的 powershell 模块的一部分。 我希望能够从我的二进制 cmdlet 中调用脚
虽然我确实在 Cmdlet Development Guidelines 中找到了很多有关如何命名 Cmdlet 和函数的信息。我没有找到任何关于函数应该以大写还是小写命名的信息。 这里的约定是什么?
我编写了许多 cmdlet。我目前正在处理的那个我想调用我的其他 cmdlet。我正在尝试这样: //Calling cmdlet protected override void ProcessRec
Powershell新手在这里,因此,如果以下问题很愚蠢,请多多包涵... 我想在Powershell中创建VSS快照,并找到了许多使用WMI函数执行此操作的示例。常见的模式是 # Pattern 1
所以我有一个名为 update-name 的 cmdlet,我无权更改它。 我创建了一个名为 update-name 的函数(与 cmdlet 的名称相同)。如何从同名函数调用 cmdlet? 我尝试
我正在编写一组需要 Oauth2 身份验证的 Powershell Cmdlet。我目前能够到达一个新的浏览器窗口打开并且用户复制访问身份验证代码以传递回 cmdlet 的地步。但是,这意味着我必须有
我试图从另一个自定义 cmdlet 运行我的自定义 PowerShell cmdlet。奇怪的是,我可以从 Windows Powershell 手动运行我的自定义 cmdlet 并且它有效,但是当我
我正在考虑使用 Powershell 脚本在我的 SQL Server 2008 实例上自动执行还原过程,我发现有两种不同的方法: 使用 invoke-sqlcmd cmdlet 加载 Microso
背景 带 SDK 的 PowerShell 3 使用 Framework 4.5 的 C# 实现 我已经使用 PSHostUserInterface 实现了我自己的 PSHost 登录。在 PSHos
背景 我在 Windows 7 上使用 Powershell 2.0。 我正在 Powershell 模块中编写一个 cmdlet(“模块”是 Powershell 2.0 的新功能)。 为了测试 c
我知道Get-LocalGroup cmdlet 位于 Microsoft.PowerShell.LocalAccounts模块。我尝试使用命令导入该模块 Get-Module Microsoft.P
在尝试使我的 PowerShell cmdlet(用 C# 编写,未编写脚本)的文档尽可能完整的过程中,我发现了一个有趣的发现。如果我包含正确的 MAML 帮助文件(例如 MyModule.dll-H
我有一个支持 -WhatIf 的 PowerShell 脚本 cmdlet & -Confirm参数。 它通过调用 $PSCmdlet.ShouldProcess() 来做到这一点。执行更改之前的方法
我正在尝试将 az cmdlet 安装到 Kudu 上以用于我的 Azure Function。我目前正在遵循本指南: How to install a PowerShell module in an
我安装了 PowerShell v2.0,除此之外,还安装了 PSCX。 PSCX 是 PowerShell 社区扩展 (http://pscx.codeplex.com/Wikipage)。 我似乎
我在代码中创建了一些 PowerShell cmdlet documentation .除了一件事,一切正常。如果我对任何文档部分有很长的描述,我会将其分成多行,以便可以轻松地从代码中读取。但是,我注
是否有一个 cmdlet 在输出中舍入数字(所有浮点值)? 当我运行以下命令时: get-vm |select ProvisionedSpaceGB,UsedSpaceGB 我将此输出作为表格:
对派生 Cmdlet 的自定义实现的外观很感兴趣,真正了解涉及的工作量。模拟了以下内容: using System.Management.Automation; namespace EMSEngine
我有一个调用另一个脚本(带参数)的脚本。调用的脚本包含 Install-WindowsFeature cmdlet。当我运行脚本时,被调用的脚本运行,但返回以下错误: Install-WindowsF
我目前正在整理一些 Powershell cmdlet。构建它们很容易,但我不知道我是否以可接受的方式构建它们(可以这么说)。 在将数据传递到 Powershell 管道时,是否应遵循任何准则/最佳实
我是一名优秀的程序员,十分优秀!