导入的 c# cmdlet 不工作
imported c# cmdlet not working
我的解决方案中有多个项目,其中一个包含一个 class = 基本上是一个通过 Power Shell 控制台使用的 C# 模块:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Management.Automation;
using System.Management;
using EDZ.DAL;
using EDZ.Model;
using System.Collections;
namespace AddUser
{
[Cmdlet(VerbsCommon.Add, "User")]
class AddUser : Cmdlet
{
protected override void ProcessRecord()
{
WriteObject("test string");
}
//public AddUser(IRepository<IEntity> irepo)
//{
// repoUser = (RepositoryBase<User>)irepo;
//}
//RepositoryBase<User> repoUser;
//RepositoryBase<User> repoUser = new RepositoryBase<User>();
//[Parameter(Mandatory = false, Position = 1)]
//public Guid UserID { get; set; }
//[Parameter(Mandatory = false, Position = 2)]
//public string FirstName { get; set; }
//[Parameter(Mandatory = false, Position = 3)]
//public string LastName { get; set; }
//[Parameter(Mandatory = false, Position = 4)]
//public string Title { get; set; }
//[Parameter(Mandatory = false, Position = 5)]
//public string Email { get; set; }
//[Parameter(Mandatory = false, Position = 6)]
//public Guid ExpertId { get; set; }
//[Parameter(Mandatory = false, Position = 7)]
//public Guid IdentityId { get; set; }
//protected override void ProcessRecord()
//{
// //try {
// User user = new User() { FirstName = this.FirstName, LastName = this.LastName, Title = this.Title, Email = this.Email, ExpertId = this.ExpertId, IdentityId = this.IdentityId };
// repoUser.Add(UserID, user);
// //}
// //catch(Exception ex)
// //{
// // WriteObject("something's wrong: " + ex.Message);
// //}
// IEnumerable tempList = repoUser.GetAll();
// foreach(User u in tempList)
// {
// WriteObject(u);
// }
//}
}
}
我做了什么:
构建解决方案并复制 AddUser.dll
的路径
以管理员身份打开了 PS 控制台
已成功导入 AddUser.dll -> 当我通过 Get-Module 命令检查它时,AddUser 出现在名称列中。虽然,同一行的 ExportedCommands 列中没有任何内容...这可能是问题所在吗?
当我写 Add-User 命令时,我希望显示 "test string",但我得到这个错误:
Add-User:术语 'Add-User' 未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。检查名字的拼写,
或者如果包含路径,请验证路径是否正确并重试。
在 line:1 char:1
+ 添加用户
+ ~~~~~~~~
+ CategoryInfo:ObjectNotFound:(添加用户:字符串)[],CommandNotFoundException
+ FullyQualifiedErrorId:CommandNotFoundException
Class 执行 cmdlet 应该是 public
否则它不会作为命令导出。由于您不使用任何显式访问修饰符,因此您的 AddUser
class 是 internal
。你应该做到 public
:
public class AddUser : Cmdlet
我的解决方案中有多个项目,其中一个包含一个 class = 基本上是一个通过 Power Shell 控制台使用的 C# 模块:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Management.Automation;
using System.Management;
using EDZ.DAL;
using EDZ.Model;
using System.Collections;
namespace AddUser
{
[Cmdlet(VerbsCommon.Add, "User")]
class AddUser : Cmdlet
{
protected override void ProcessRecord()
{
WriteObject("test string");
}
//public AddUser(IRepository<IEntity> irepo)
//{
// repoUser = (RepositoryBase<User>)irepo;
//}
//RepositoryBase<User> repoUser;
//RepositoryBase<User> repoUser = new RepositoryBase<User>();
//[Parameter(Mandatory = false, Position = 1)]
//public Guid UserID { get; set; }
//[Parameter(Mandatory = false, Position = 2)]
//public string FirstName { get; set; }
//[Parameter(Mandatory = false, Position = 3)]
//public string LastName { get; set; }
//[Parameter(Mandatory = false, Position = 4)]
//public string Title { get; set; }
//[Parameter(Mandatory = false, Position = 5)]
//public string Email { get; set; }
//[Parameter(Mandatory = false, Position = 6)]
//public Guid ExpertId { get; set; }
//[Parameter(Mandatory = false, Position = 7)]
//public Guid IdentityId { get; set; }
//protected override void ProcessRecord()
//{
// //try {
// User user = new User() { FirstName = this.FirstName, LastName = this.LastName, Title = this.Title, Email = this.Email, ExpertId = this.ExpertId, IdentityId = this.IdentityId };
// repoUser.Add(UserID, user);
// //}
// //catch(Exception ex)
// //{
// // WriteObject("something's wrong: " + ex.Message);
// //}
// IEnumerable tempList = repoUser.GetAll();
// foreach(User u in tempList)
// {
// WriteObject(u);
// }
//}
}
}
我做了什么:
构建解决方案并复制 AddUser.dll
的路径
以管理员身份打开了 PS 控制台
已成功导入 AddUser.dll -> 当我通过 Get-Module 命令检查它时,AddUser 出现在名称列中。虽然,同一行的 ExportedCommands 列中没有任何内容...这可能是问题所在吗?
当我写 Add-User 命令时,我希望显示 "test string",但我得到这个错误:
Add-User:术语 'Add-User' 未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。检查名字的拼写, 或者如果包含路径,请验证路径是否正确并重试。 在 line:1 char:1 + 添加用户 + ~~~~~~~~ + CategoryInfo:ObjectNotFound:(添加用户:字符串)[],CommandNotFoundException + FullyQualifiedErrorId:CommandNotFoundException
Class 执行 cmdlet 应该是 public
否则它不会作为命令导出。由于您不使用任何显式访问修饰符,因此您的 AddUser
class 是 internal
。你应该做到 public
:
public class AddUser : Cmdlet