我的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) 我在处理 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模块(即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上有个职位,但这对我没有帮助。
许多正则表达式引擎在单行字符串中匹配.* 两次,例如,在执行基于正则表达式的字符串替换时:
在许多引擎中有第二个匹配,即空字符串 ; 也就是说,即使第一个匹配消耗了整个输入字符串,.*也会再次匹配,然后匹配输入字符串末尾的空字符串.
^.*我的问题是:
这种行为有充分的理由吗?一旦输入字符串被完全消耗,我就不会期望再次尝试找到匹配项.
除了试验和错误,你能从文档/正则表达式方言/标准中收集哪些引擎表现出这种行为?
更新:雷沃乐于助人的回答解释了如何与当前的行为的; 至于潜在的原因,请参阅此相关问题.
表现出行为的语言/平台:
# .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) 我在使用“|”将一行拆分为数组时遇到问题 放在文本文件中并按一定顺序重新组装。文本文件中有多行与原始行类似。
这是原来的行:
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) 我想将信息日志写入 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 任务,如下所示:
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
我正在开发一个使用该-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)
着名的口头禅:"它不漂亮,但它有效."
我们可以传递什么标志Get-Content来显示控制字符,如\r\n或\n?
我想要做的是确定文件的行结尾是Unix还是Dos风格.我试过简单的运行Get-Content,没有显示任何行结束.我也尝试过使用Vim set list,它只显示$了行结尾的内容.
我想用PowerShell做这件事,因为那将是非常有用的.
如果有这段代码
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以确保文件夹已真正删除?还是我想念其他东西?
powershell ×8
.net ×1
azure ×1
cmd ×1
csv ×1
diagnostics ×1
export-csv ×1
filesystems ×1
import-csv ×1
logging ×1
macos ×1
node.js ×1
ntfs ×1
perl ×1
python ×1
regex ×1
ruby ×1
synchronous ×1
text-parsing ×1
windows ×1