【问题标题】:Assemble oneliners from multiline PS script从多行 PS 脚本组装 oneliners
【发布时间】:2020-08-26 19:30:16
【问题描述】:

需要从命令行批处理脚本操作 ICS,但没有找到合适的控制台工具。但发现powershell script 执行此类任务。问题是脚本是多行的,并且由于我对 PS 的经验为零,因此寻找可以从此类脚本创建少量单行脚本以轻松运行批处理脚本并解析其输出的人。需要以下单行:

  • 列出启用了 ICS 的适配器
  • 为特定接口启用 ICS
  • 在特定接口上禁用 ICS

谁能帮我解决这个问题?

【问题讨论】:

  • 使用单行并没有什么好处,(它也会使你的脚本更难阅读/修改/理解)。此外,本网站不是代码编写或转换服务,因此您的问题不在此处,并且由于您不是新成员,因此您应该很清楚这一点,(否决)。
  • 至于这个...... [我对 PS 的经验为零],每个人都来过这里,但是请花点时间来增加它。访问 YOutube 并搜索“开始 PowerShell”。如果您不努力学习它,那么单行将不再有意义。永远不要运行任何人的代码,无论你从哪里得到它,除非你知道它在做什么,或者接受使用它可能会严重损害你的计算机或你的企业的所有后果。
  • 进一步澄清@Campo 的意思。所以有规则:Provide MRE --- How to ask --- Don't ask --- Proper Topic --- 你的帖子实际上是在要求这里的人们为你做你的工作/工作。这真的不是一回事。有时它确实会发生,但通常情况下,只是有趣。
  • 让网络设置操作批处理脚本执行多个网络相关任务。所有任务都由控制台实用程序完成,但没有用于 ICS(和其他问题)的此类工具,因此我决定以以下方式合并 PS:for /f %a in ('powershell.exe" oneliner 执行单个任务并生成可解析output"') do (处理 oneliner 输出) 为此,我需要将 PS 脚本拆分为一系列 oneliner。这还不够理由吗?我自己用其他几个 PS 脚本做到了这一点,但我浪费了大量时间,远远超过有经验的人提供帮助。
  • @postanote 如果我必须在运行未理解的工作代码或花费几周或几个月(因为我不是最聪明的_man_on_the_planet)来学习新的编程语言之间做出决定,我更喜欢第一个选项。我有我生活中的其他偏好,并没有意义推动不知名的人花时间学习一些东西。无论如何,我的技能无法与这里的大多数人相提并论,我试图帮助这里的其他人解决批处理脚本中的问题,这是我所知道的唯一“语言”,而不是强迫他们学习。我知道您正在观看 SO 的“纯粹性”,但尊重不同方法的人......

标签: powershell cmd one-liner


【解决方案1】:

为什么他们需要单线?这些都不适合单行,例如您的第一个可能看起来像这样。

(New-Object -ComObject HNetCfg.HNetShare -OutVariable netshare).EnumEveryConnection | foreach {[PSCustomObject]@{Interface = $netshare.NetConnectionProps.Invoke($_).name; ICSEnabled = $netshare.INetSharingConfigurationForINetConnection.invoke($_).sharingenabled}}

【讨论】:

  • 谢谢!这正是我正在寻找的。使用 oneliner 的(希望是好的)原因在上面的评论中。我相信这对其他人也可能有用。
  • 有什么办法可以避免点作为列分隔符?接口名称中有空格,因此不容易解析批处理文件中的输出。列翻转(ICSEnabled 列优先)也会有所帮助。或者可能打印接口索引而不是接口名称,但不知道 PS 输出格式化的可能性。只是玩-OutputFormat 命令,但没有运气..
  • 刚刚发现如果name换成Guid,解析问题就解决了!
  • 由于某种原因开始显示错误消息:Exception calling "Invoke" with "1" argument(s): "Cannot process argument because the value of argument "arguments" is null. Change the value of argument "arguments" to a non-null value." At line:1 char:96 + ... | foreach {[PSCustomObject]@{Interface = $netshare.NetConnectionProp ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : PSArgumentNullException
  • 确保以管理员身份运行
猜你喜欢
  • 1970-01-01
  • 2012-08-16
  • 2014-09-18
  • 1970-01-01
  • 1970-01-01
  • 2021-01-11
  • 2013-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多