小编mkl*_*nt0的帖子

使用Get-ChildItem -Exclude或-Include不返回任何内容

我的C:目录中有一个包含许多文件的列表.如果我尝试在其上运行-Exclude,则不会返回.与-Include相同.如果我使用过滤器,它会返回我期望的结果.我不明白它应该做什么?

以下是我正在运行并且什么都没得到的示例:

Get-ChildItem -Path C: -Exclude "*.txt"
Run Code Online (Sandbox Code Playgroud)

我一无所获.如果我跑

Get-Childitem -filter "*.txt"
Run Code Online (Sandbox Code Playgroud)

我得到了回报:

  Mode                LastWriteTime         Length Name                                                                               
----                -------------         ------ ----                                                                               
-a----        11/7/2007   8:00 AM          17734 eula.1028.txt                                                                      
-a----        11/7/2007   8:00 AM          17734 eula.1031.txt                                                                      
-a----        11/7/2007   8:00 AM          10134 eula.1033.txt                                                                      
-a----        11/7/2007   8:00 AM          17734 eula.1036.txt                                                                      
-a----        11/7/2007   8:00 AM          17734 eula.1040.txt                                                                      
-a----        11/7/2007   8:00 AM            118 eula.1041.txt                                                                      
-a----        11/7/2007   8:00 AM          17734 eula.1042.txt                                                                      
-a----        11/7/2007   8:00 AM          17734 eula.2052.txt                                                                      
-a----        11/7/2007   8:00 AM          17734 eula.3082.txt                                                                      
               7/7/2016   8:50 AM             93 HaxLogs.txt                                                                        
-a---- …
Run Code Online (Sandbox Code Playgroud)

powershell powershell-4.0

6
推荐指数
2
解决办法
2827
查看次数

带有德国变音符号的导入-CSV/导出-Csv (ä,ö,ü)

我在处理 csv 导出时遇到了一个小问题,其中包含像 ä,ö,ü(德语元音变音)这样的变异元音

我只是导出

Get-WinEvent -FilterHashtable @{Path=$_;ID=4627} -ErrorAction SilentlyContinue |export-csv -NoTypeInformation -Encoding Default -Force ("c:\temp\CSV_temp\"+ $_.basename + ".csv")
Run Code Online (Sandbox Code Playgroud)

这工作正常。我的 csv 文件中有 ä,ö,ü 正确。

之后我做了一些排序:

Get-ChildItem 'C:\temp\*.csv' |
    ForEach-Object { Import-Csv $_.FullName } |
    Sort-Object { [DateTime]::ParseExact($_.TimeCreated, $pattern, $culture) } |
    Export-Csv 'C:\temp\merged.csv' -Encoding Default -NoTypeInformation -Force
Run Code Online (Sandbox Code Playgroud)

我尝试了所有编码、ASCII、BigEndianUnicode、UniCode,但都没有成功。

导出和排序时如何保留特殊字符 ä,ö,ü 等?

powershell character-encoding import-csv export-csv

6
推荐指数
1
解决办法
1万
查看次数

如何从本地文件夹安装/更新Powershell模块-设置内部模块存储库

我需要在一个生产盒上安装PowerShell模块(即sqlserver),但是生产服务器没有任何Internet连接。

我使用的另一种方法是使用save-module将模块文件保存到共享文件夹中,然后将文件从共享文件夹直接复制到生产服务器的PS模块路径中

c:\program files\WindowsPowerShell\Modules
Run Code Online (Sandbox Code Playgroud)

它可以工作,但是我只是想知道我们是否可以使用现有的方法,即安装模块,例如

install-module -name sqlserver -repository "my shared folder"
Run Code Online (Sandbox Code Playgroud)

该要求也扩展到更新模块。

使用保存模块然后进行复制和粘贴似乎非常不可靠,因为我不知道安装模块是否实际上会进行某些DLL文件注册或安装。

任何PS专家都可以提出一些建议,例如在没有Internet连接的情况下使用安装模块吗?

在此先感谢您的时间。

PS:我知道在SO上有个职位,但这对我没有帮助。

powershell powershellget

6
推荐指数
1
解决办法
4813
查看次数

为什么一些正则表达式引擎在单个输入字符串中匹配.*两次?

许多正则表达式引擎在单行字符串中匹配.* 两次,例如,在执行基于正则表达式的字符串替换时:

  • 根据定义,第一个匹配是整个(单行)字符串,如预期的那样.
  • 在许多引擎中有第二个匹配,即空字符串 ; 也就是说,即使第一个匹配消耗了整个输入字符串,.*也会再次匹配,然后匹配输入字符串末尾的空字符串.

    • 注意:要确保只找到一个匹配项,请使用^.*

我的问题是:

  • 这种行为有充分的理由吗?一旦输入字符串被完全消耗,我就不会期望再次尝试找到匹配项.

  • 除了试验和错误,你能从文档/正则表达式方言/标准中收集哪些引擎表现出这种行为?

更新:雷沃乐于助人的回答解释了如何与当前的行为的; 至于潜在的原因,请参阅此相关问题.

表现出行为的语言/平台:

 # .NET, via PowerShell (behavior also applies to the -replace operator)
 PS> [regex]::Replace('a', '.*', '[$&]'
 [a][]  # !! Note the *2* matches, first the whole string, then the empty string

 # Node.js
 $ node -pe "'a'.replace(/.*/g, '[$&]')"
 [a][]

 # Ruby
 $ ruby -e "puts 'a'.gsub(/.*/, '[\\0]')"
 [a][]

 # …
Run Code Online (Sandbox Code Playgroud)

.net ruby python regex node.js

6
推荐指数
1
解决办法
231
查看次数

Powershell:逐行读取文本文件并按“|”分割

我在使用“|”将一行拆分为数组时遇到问题 放在文本文件中并按一定顺序重新组装。文本文件中有多行与原始行类似。

这是原来的行:

80055555|Lastname|Firstname|AidYear|DCDOCS|D:\BDMS_UPLOAD\800123456_11-13-2018 14-35-53 PM_1.pdf
Run Code Online (Sandbox Code Playgroud)

我需要它看起来像这样:

80055555|DCDOCS|Lastname|Firstname|AidYear|D:\BDMS_UPLOAD\800123456_11-13-2018 14-35-53 PM_1.pdf
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的代码:

$File = 'c:\Names\Complete\complete.txt'
$Arr = $File -split '|'
foreach ($line in Get-Content $File)
{
  $outputline = $Arr[0] + "|" + $Arr[4] + "|" + $Arr[1] + "|" + $Arr[2] + "|" + 
    "@@" + $Arr[5] |
      Out-File -filepath "C:\Names\Complete\index.txt" -Encoding "ascii" -append 
}
Run Code Online (Sandbox Code Playgroud)

csv powershell text-parsing

6
推荐指数
1
解决办法
2万
查看次数

Azure 自动化是否支持写入信息?

我想将信息日志写入 Azure 自动化作业日志。我已经创建了简单的 PowerShell 运行手册

$InformationPreference = "Continue"
Write-Information "Hello info" 
Write-Verbose "Hello Verbose"
Write-Warning "Hello warning"
Write-Error "Hello error"
Run Code Online (Sandbox Code Playgroud)

在 Runbook 执行中所有日志我只看到详细、警告和错误日志

在此处输入图片说明

如果要禁用 Runbook Verbose 日志,我只会看到警告和错误。它在本地工作正常,但在 Azure 中则不行。我也试过Write-Information "Hello info" -InformationAction Continue- 没有帮助。

Write-Information出现在 PowerShell 5.0 中。我已经通过使用检查了 Azure 自动化沙箱机器中的 PS 版本$PSVersionTable- 它超过 5。所以,应该可以工作。

你知道他们支持不支持吗?

powershell logging azure azure-automation

6
推荐指数
1
解决办法
1710
查看次数

如何转义 schtasks /tr 参数

我需要安排一个 PowerShell 任务,如下所示:

powershell.exe -file ..\Execute\execute.ps1
Run Code Online (Sandbox Code Playgroud)

我尝试将它分配给一个参数,$Argument然后将其传递给schtasks如下所示:

$Argument = "powershell.exe -file '..\Execute\execute.ps1'"
schtasks /create /tn "SOE_Checks" /tr $Argument /sc DAILY /st 05:00 /ru "System" /rl HIGHEST /f
Run Code Online (Sandbox Code Playgroud)

但是在运行上面的代码后,什么也没发生 - 虽然任务创建成功,但它似乎没有运行。

我也尝试将它分配给$Argument没有引号,它有效,但我收到以下警告:

ERROR: Invalid syntax. Value expected for '/tr'.
Type "SCHTASKS /CREATE /?" for usage.
Run Code Online (Sandbox Code Playgroud)

谁能让我知道我在这里做错了什么?(我知道我可以使用 PowerShell 完成此操作,New-ScheduledTaskAction但我希望它以这种方式工作)

只是想补充一点,如果我改变的文件路径的特定位置$Argument这样的,
$Argument = "powershell.exe -file 'C:\SOE\Execute\execute.ps1'",它工作正常,没有任何警告,但这并不理想。

我已经阅读了这篇文章,但它对我不起作用

windows powershell cmd scheduled-tasks windows-task-scheduler

6
推荐指数
1
解决办法
4038
查看次数

我想 - 在OS X上敏感地工作.是否可能?

我正在开发一个使用该-e标志的脚本,如

unless (-e $fileName)
{
  ...
}
Run Code Online (Sandbox Code Playgroud)

这在OS X上工作正常.或者说,它无法正常工作.我希望它区分大小写.该脚本也在Linux机器上运行,-e检查失败 - 正确! - 因为区分大小写.

我尝试使用替代路径open <FILEHANDLE, '$fileName'),但似乎这也是不区分大小写的.

编辑:感谢下面回答的所有人.我知道HFS +不区分大小写,但我认为我可以以某种方式"强迫"它.我最终通过执行以下操作来强制检查:

opendir my($dh), $dirName or die "Couldn't open dir '$dirName'";
my @refFiles = readdir $dh;
closedir $dh;

foreach $refFile (@refFiles)
{
    if ($refFile eq $refFileName)
    {
        $found = 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

着名的口头禅:"它不漂亮,但它有效."

macos perl case-sensitive case-insensitive

5
推荐指数
2
解决办法
642
查看次数

获取内容并显示控制字符,例如`r - 可视化字符串中的控制字符

我们可以传递什么标志Get-Content来显示控制字符,如\r\n\n

我想要做的是确定文件的行结尾是Unix还是Dos风格.我试过简单的运行Get-Content,没有显示任何行结束.我也尝试过使用Vim set list,它只显示$了行结尾的内容.

我想用PowerShell做这件事,因为那将是非常有用的.

powershell diagnostics control-characters

5
推荐指数
2
解决办法
6704
查看次数

PowerShell Remove-Item不等待

如果有这段代码

if(Test-Path -Path $OUT) 
{ 
    Remove-Item $OUT -Recurse 
}
New-Item -ItemType directory -Path $OUT
Run Code Online (Sandbox Code Playgroud)

有时它可以工作,但有时New-Item行会产生PermissionDenied ItemExistsUnauthorizedAccessError错误。我认为这意味着以前的Remove-Item尚未完全执行,并且无法创建文件夹,因为该文件夹仍然存在。

如果我在那里睡觉

if(Test-Path -Path $OUT) 
{ 
    Remove-Item $OUT -Recurse 
    Start-Sleep -s 1
}
New-Item -ItemType directory -Path $OUT
Run Code Online (Sandbox Code Playgroud)

然后它总是可以工作。如何强制Remove-Item以确保文件夹已真正删除?还是我想念其他东西?

filesystems powershell ntfs synchronous

5
推荐指数
2
解决办法
1984
查看次数