【问题标题】:Century10. Underthewire.tech walkthrough世纪 10。 Underthewire.tech 演练
【发布时间】:2019-10-19 19:56:19
【问题描述】:

Century10 的密码是桌面文件中的第 161 个单词。

注意: - 密码无论在屏幕上如何显示都是小写的。

*上面的问题是我面临的挑战。我尝试了下面的命令。 *

Get-Content C:\Users\Century9\Desktop\Word_File.txt | Select-Object -Index 161

结果为零。我知道我需要为字符串分配一个值,因为它现在被视为一个完整的实体。但是我该怎么做呢?

【问题讨论】:

    标签: powershell scripting


    【解决方案1】:

    如果感兴趣的标记是文件中的第 161 个单词,请使用以下方法,该方法将文件拆分为单词,而不考虑换行符强>[1]:

    $pass = (-split (Get-Content -Raw Word_File.txt))[160]
    

    如果要将令牌转换为全小写,请附加 .ToLower()

    请注意,上面使用-Raw 将整个文件作为单个字符串加载到内存中。

    • 由于数组索引是基于0,因此索引[160] 返回第161 个元素。

    • -split operator 的一元形式将输入按空格拆分为令牌数组。

      • 注意:如果您想通过更严格的定义来划分正则表达式上下文中的单词构成,请改用以下内容:
    $pass = ((Get-Content -Raw Word_File.txt) -split '\W+' -ne '')[160]
    

    [1]如果您的输入文件包含每个单词各占一行

    您的解决方案是正确的,除了您应该将160 传递给Select-Object -Index,因为-Index 参数需要0-based 索引,而不是1-基于行号

    # Extract the 161st line.
    $pass = Get-Content Word_File.txt | Select-Object -Index 160
    

    转换为小写:

    $pass = (Get-Content Word_File.txt | Select-Object -Index 160).ToLower()
    

    如果输入文件的行数少于 161 行(错误消息You cannot call a method on a null-valued expression),上述操作将失败

    如果您更喜欢安静地接收无输出,请使用以下命令(为简洁起见,使用内置别名 select 表示 Select-Objectforeach 表示 ForEach-Object):

    $pass = Get-Content Word_File.txt | select -Index 160 | foreach ToLower
    

    【讨论】:

    • 对我应该从哪里开始掌握 powershell 和学习脚本有什么想法吗?我尝试了我的研究,underthewire 网站似乎是搜索时出现的网站之一。不过还是谢谢你的回答:)
    • @JellyRainbows: stackoverflow.com/a/48491292/45375 包含一些入门资源的指针。另外,请允许我在下一条评论中给你标准的建议给新人。
    【解决方案2】:

    尝试运行这个:

    ((Get-Content -Path C:\Users\Century9\Desktop\Word_File.txt -TotalCount 161)[-1]).ToLower()
    

    【讨论】:

    • 方法调用失败,因为 [System.Char] 不包含名为“ToLower”的方法。在 line:1 char:1 + ((Get-Content -Path C:\Users\Century9\Desktop\Word_File.txt -TotalCou ... + ~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : MethodNotFound
    • @JellyRainbows:只有将1-TotalCount 一起使用时才会发生这种情况;为避免该问题,请在 Get-Content 命令周围使用 @(...) 而不是 (...)
    猜你喜欢
    • 1970-01-01
    • 2018-03-03
    • 1970-01-01
    • 2022-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-04
    相关资源
    最近更新 更多