什么是PowerShell有用?

zza*_*ndy 13 .net powershell scripting

我是一名称职的C#程序员,也是PowerShell的新手.到底有什么好处呢?它更像是程序员的工具还是管理员?

请分享您的经验.何时使用.NET程序集编写脚本比使用C#工具更容易?你用它做什么真正的生产任务?

也许问题应该是:与C#相比有什么好处,而不是批处理

Dav*_*kle 7

使用.NET程序集编写脚本比使用C#工具更容易吗?

啊,看,就是这样.PowerShell弥补了批处理文件和.NET世界之间的鸿沟.PowerShell回答了这个问题,"如果你要编写一个具有.NET全部功能的新命令解释器,那么它是完全动态的,并且在命令shell中几乎拥有了人们想要的大部分内容?"

那么你什么时候使用PowerShell而不是C#?对于集成或编排其他应用程序的小型应用程序来说更方便 - 它更方便,因为您不必编译它,并且它已经有一种将数据传递给其他脚本和scriptlet的标准方法,这很容易知道PowerShell的人(知道PowerShell).


Kei*_*ill 7

我是一名C#开发人员,自从测试版以来,它仍然被称为Monad.我还在UNIX上进行了大量的开发,包括使用Korn Shell进行自动化/脚本编写.对我来说,PowerShell是一个天赐之物,因为我对Korn Shell与Windows的小阻抗不匹配感到厌倦.例如,指定网络共享路径特别严重"\\\\\\server\\\\share"IIRC.根据字符串被评估的次数,你有多少次使用反斜杠来逃避猜测游戏.

我将PowerShell用于许多自动化任务,例如:

  • 浏览我想要搜索CSPROJ文件内容的大型源目录.
  • 我曾经用PowerShell脚本修改了260多个VCPROJ文件.
  • 另一次,我必须创建一堆新的C#项目,每个项目都需要配置相当多的项目属性,包括大量的代码分析调整.我写了一个脚本来获取库存C#项目文件,并为我做了所有的调整.节省了我很多时间,更重要的是,让我犯了很多错误和/或忘记设置某些设置
  • TFS查询(使用TFPT PowerShell cmdlet),例如在签入注释中搜索具有特定单词的最近变更集.
  • 删除特定文件夹层次结构中的所有临时文件(bin/obj dirs,suo文件等).

要替换自定义命令行实用程序:

您可以使用PowerShell作为替换您以前编写的所有小命令行实用程序的好方法.想想这个.PowerShell是一种功能相当强大的脚本语言,可让您访问大多数.NET Framework.它特别擅长参数解析,即它有一个内置的参数解析引擎,它为您提供:命名参数,位置参数,可选参数,开关参数,管道绑定参数,参数验证等.现在考虑典型命令行实用程序中的代码将多少用于参数解析与实际功能.我几乎停止编写命令行实用程序(除非它们特别复杂 - 然后你无法击败VS调试器).我让PowerShell为我处理所有参数解析.使用PowerShell 2.0,只需使用适当格式化的注释装饰脚本,就可以非常轻松地向实用程序添加文档/用法.

我还使用PowerShell作为.NET REPL:

  • 无需创建ConsoleApplication59只是为了查看格式化字符串的作用,例如我只是转到PowerShell提示符并尝试类似的东西"{0,20:F1}" -f 41.22.

您还可以轻松地在自己的C#应用​​程序中托管PowerShell引擎.如果您为最终用户提供要使命令行可编写脚本的功能,这会派上用场.您可以将这些功能编写为PowerShell cmdlet(在C#中).然后可以直接从命令行使用这些cmdlet,如果在GUI应用程序中托管PowerShell,则可以从那里访问同一组代码,例如:

    private bool VerifyPowerShellScriptSignature(string path)
    {
        using (var runspaceInvoker = new RunspaceInvoke())
        {
            Collection<PSObject> results =
                runspaceInvoker.Invoke("Get-AuthenticodeSignature " + path);
            Signature signature = results[0].BaseObject as Signature;
            return signature == null ? false : 
                                (signature.Status == SignatureStatus.Valid);
        }
    }
Run Code Online (Sandbox Code Playgroud)


Doc*_*own 6

要编写C#工具,通常需要设置Visual Studio项目(或另一个IDE中的项目).如果您"手动"执行此操作,则至少需要一个构建脚本来运行C#编译器.如果对于特定任务而言这似乎是一个过多的开销,并且您只需要一个简单的单文件源和程序是一体化解决方案,那么PowerShell脚本可能是更好的选择.

一些可能的原因:

  • 您的计算机上没有安装Visual Studio(或任何其他C#IDE),或者根本不习惯它(就像许多系统管理员一样)
  • 该程序非常小,您不需要调试器.一些简单的控制台输出将执行它.
  • 您不希望维护多个文件.
  • 您不希望将工具的配置参数放入单独的配置文件中.
  • 当您可以定义单个任务但无法确定确切的工作流时,脚本和C#的混合是理想的.在C#中创建cmdlet或提供程序使您的脚本能够以一般方式访问任何内容,PowerShell成为粘合剂,使工作流程灵活适应新环境.
  • 您有几个相互竞争的总体设计理念,并希望快速测试可行性的可能性.PowerShell的软输入和流水线架构使得很容易忽略控制结构和类型细节的许多变幻莫测,并深入了解算法的核心.

  • 这对您来说可能不是问题,但对于网络管理员来说,这可能是一个真正的痛苦——随着问题变得更小和更简单,开销会变得越来越大。 (2认同)
  • 您也可以调试 PowerShell。安装随附“Windows PowerShell ISE”,这是一个带有调试功能的 IDE。当然不如Visual Studio舒服,但是调试PowerShell脚本已经足够了。 (2认同)