【问题标题】:Filter a file based on an object of string根据字符串对象过滤文件
【发布时间】:2011-06-06 19:01:55
【问题描述】:

我有一个 SQL 恢复脚本(文件系统上的文件),其中包含要恢复的数据库列表,如下所示:

恢复数据库 DB1... 恢复数据库 DB2... 恢复数据库 DB3...

然后我有一个对象,其中包含已经在线的数据库列表。

$onlineDatabases.Database 输出 DB1 DB2

如何返回仅包含 DB3 数据库的新恢复脚本?

【问题讨论】:

    标签: powershell powershell-2.0


    【解决方案1】:
    $online_databases = new-object psobject -property @{database = @("DB1","DB2")}
    $test_script = "RESTORE DATABASE DB1","RESTORE DATABASE DB2","RESTORE DATABASE DB3"
    
    [regex]$online_regex = "RESTORE DATABASE " + '(‘ + (($online_databases.database |foreach {[regex]::escape($_)}) –join “|”) + ‘)’
    $new_script = $test_script -notmatch $online_regex
    
    $new_script
    
    RESTORE DATABASE DB3
    

    将脚本文件中的 $test_script 替换为 get-content,然后通过管道将 $new_script 传输到 out-file 以保存它。

    【讨论】:

    • 当我在脚本中运行它时,$new_script 返回 True 而不是脚本。
    • 从头开始,它是一个 PowerShell ISE 失败。它什么也没返回。我会看看我能不能弄明白。
    • 如果有帮助,这里是对该正则表达式的解释:blogs.technet.com/b/heyscriptingguy/archive/2011/02/18/…
    • 谢谢,我不得不稍微调整一下,因为我的对象有问题。我认为是因为数据库被列为 NoteProperty?我必须使用 $onlineDatabases ,然后将您的正则表达式转换为字符串,然后在 {Database= 到 "" 和 } 和 \@ 上查找并替换,然后我这样做了!!!!谢谢,我不知道为什么我的搜索技能没有打开链接,但你帮助我在我的项目中畅通无阻。我很感激。
    猜你喜欢
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    • 2022-01-13
    • 1970-01-01
    • 2022-11-24
    相关资源
    最近更新 更多