Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 使用类-Like运算符_Powershell - Fatal编程技术网

Powershell 使用类-Like运算符

Powershell 使用类-Like运算符,powershell,Powershell,我需要修改这个脚本,我一直在工作,以发送电子邮件警报,如果我们发现一个目录的名称中有1970年。我正在尝试使用-Like操作符来完成这个任务,但是我无法让它正常工作。我不知道问题是否出在我对操作符的使用上,或者支票的位置上,或者完全是其他什么问题 一些注意事项:我已经编辑掉了电子邮件和SMTP服务器,但我可以确认这行代码本身可以工作 以下是我尝试过的: $limit = (Get-Date).AddDays(0) $logFile = "C:\STest\Log\log.txt" #Throw

我需要修改这个脚本,我一直在工作,以发送电子邮件警报,如果我们发现一个目录的名称中有1970年。我正在尝试使用-Like操作符来完成这个任务,但是我无法让它正常工作。我不知道问题是否出在我对操作符的使用上,或者支票的位置上,或者完全是其他什么问题

一些注意事项:我已经编辑掉了电子邮件和SMTP服务器,但我可以确认这行代码本身可以工作

以下是我尝试过的:

$limit = (Get-Date).AddDays(0)
$logFile = "C:\STest\Log\log.txt"

#Throw a timestamp on the log file
Add-Content -Path $logFile "=======$(Get-Date)======="

#Get all of the paths for each camera
$paths = Get-ChildItem -Path "C:\Videos\" |Select-Object -ExpandProperty FullName

#for each path we found
foreach ($pa in $paths) {
    # Delete directories older than the $limit.
    $file = Get-ChildItem -Path $pa -Recurse -Force | Where-Object { $_.PSIsContainer -and $_.CreationTime -lt $limit } 
    $file | Remove-Item -Recurse -Force
    $file | Select -Expand FullName | Out-File $logFile -append
    if ($file.FullName -like '1970'){
        Send-MailMessage -to "Joe <Joe@Joe.com>" -from "Tod <Tod@tod.com>" -subject "1970 Found" -body "Testing" -SmtpServer mySMTPserver
    }
}

尝试使用replacement-like替换为-match

    if($file -match "1970"){ DO SOMETHING }

尝试使用replacement-like替换为-match

    if($file -match "1970"){ DO SOMETHING }
-like是一个通配符运算符。要匹配字符串中任意位置的“1970”,需要在两端添加通配符*:

PS C:\> 'something 1970 somethingelse' -like '*1970*'
True
如果要匹配字符串开头的“1970”,请省略前导*。 要匹配字符串末尾的“1970”,请省略尾随的*

使用通配符?字符匹配任何单个字符,以及[n-m]'globbing'通配符语法匹配一系列字符

见:

有关使用通配符匹配的详细信息

从性能角度来看,直接比较-eq、-ne、-lt、-gt最快,其次是通配符匹配-like和-notlike。正则表达式匹配-match和-notmatch提供了最大的灵活性,但也是最慢的。

-like是一个通配符运算符。要匹配字符串中任意位置的“1970”,需要在两端添加通配符*:

PS C:\> 'something 1970 somethingelse' -like '*1970*'
True
如果要匹配字符串开头的“1970”,请省略前导*。 要匹配字符串末尾的“1970”,请省略尾随的*

使用通配符?字符匹配任何单个字符,以及[n-m]'globbing'通配符语法匹配一系列字符

见:

有关使用通配符匹配的详细信息


从性能角度来看,直接比较-eq、-ne、-lt、-gt最快,其次是通配符匹配-like和-notlike。正则表达式匹配-match和-notmatch提供了最大的灵活性,但也是最慢的。

try-match代替-like后者需要通配符try-match代替-like后者需要通配符excellent。但它似乎只发送一次电子邮件,即使名称中有多个带有1970的目录。您可能正在从Get ChildItem返回一组文件,您需要循环这些文件并执行匹配。非常好。但它似乎只发送一次电子邮件,即使名称中有多个带有1970的目录。您可能正在从Get ChildItem返回一组文件,您需要循环这些文件并执行匹配。@Ansgar:谢谢您的编辑,我弄错了开头/结尾。有什么特别的理由要删掉性能方面的考虑吗?奇怪的是,我不记得在编辑答案时删除或甚至注意到了那一段。已恢复。@Ansgar:谢谢您的编辑,我把前导/尾随部分搞糟了。有什么特别的理由要删掉性能方面的考虑吗?奇怪的是,我不记得在编辑答案时删除或甚至注意到了那一段。恢复