最近我要通过PowerShell创建一个关于位于*.inf
文件夹中的C:\Windows\winsxs
文件的报告,其中包含Filter
Get-ChildItem
参数$infFiles = Get-ChildItem -Path C:\Windows\winsxs -Filter *.inf -Recurse
(请参阅有关{的官方文档{3}}),如:
.inf_loc
但我注意到,结果中还包含其他文件扩展名的文件,例如.inf_dbf42768
或Include
。
另一方面,.inf
参数按预期工作,仅返回$infFiles = Get-ChildItem -Path C:\Windows\winsxs -Include *.inf -Recurse
个文件:
Filter
我已经使用PS版本3和4测试了这种现象,并发现,如果你要查找的扩展名正好比任何文件都要3个字符,那么这些扩展名以相同的3个字符开头,即使是那些文件的扩展名较长。如果您要查找的扩展名短于或长于3个字符,则根据我的经验,至少没有此类问题。
虽然性能在我的情况下并不重要,但据我所知,使用Include
参数比numOfAdults = testRunner.testCase.testSuite.getPropertyValue("NumberOfAdults").toInteger()
numOfChildren = testRunner.testCase.testSuite.getPropertyValue("NumberOfChildren").toInteger()
numOfInfants = testRunner.testCase.testSuite.getPropertyValue("NumberOfInfants").toInteger()
totalPax = numOfAdults + numOfChildren + numOfInfants
firstName = "Firstname"
surname = "Surname"
emailAdd = "firstname" + ".surname@random.com"
adultTitle = ["Mr","Mrs","Miss","Ms"].sort{new Random()}?.take(1)[0]
infantTitle = ["Mstr","Miss"].sort{new Random()}?.take(1)[0]
gender = ["Female","Male"].sort{new Random()}?.take(1)[0]
log.info "Total Pax " + totalPax
def passengersXML = ""
def passengerXML = """
<Passenger>
<DateOfBirth>2001-01-05T09:24:39.7911558+00:00</DateOfBirth>
<EmailAddress>FirstNameOne.SurnameOne@random.com</EmailAddress>
<FirstName>$firstName</FirstName>
<Gender>$gender</Gender>
<PassengerNum>1</PassengerNum>
<PersonGuid>abcdefghijklmno</PersonGuid>
<Surname>SurnameOne</Surname>
<Title>Miss</Title>
<Type>Adult</Type>
</Passenger>
"""
for (i = 1; i <=numOfAdults; i++){
passengersXML += passengerXML
}
//
//
for (i = 1; i <=numOfChildren; i++){
passengersXML += passengerXML
}
//
//
for (i = 1; i <=numOfInfants; i++){
passengersXML += passengerXML
}
def langs = new XmlParser().parseText(passengerXML)
log.info passengersXML
testRunner.testCase.testSuite.setPropertyValue("PassengerResponse", passengerXML)
参数更有效,因为它已经在提供程序级别执行过滤,如this cmdlet and its parameters:
过滤器比其他参数更有效,因为提供者 在检索对象时应用它们,而不是使用Windows PowerShell在检索对象后对其进行过滤。
... -Filter参数生成早期的早期过滤, 而 - 包含是后来的早期过滤!性能差异 这两种方法之间的结果非常重要!
是记录在案的行为/错误吗?我在here中也发现了类似的内容,但在官方文档中却没有。
答案 0 :(得分:1)
根据链接的问题,这似乎是-Filter
参数的限制。我想另一个解决方案是仍然使用-Filter
来获得性能优势,但之后使用Where-Object
过滤掉您不想要的额外结果:
Get-ChildItem -filter "*.inf" | where {$_ -match "\.inf$"}
这使用正则表达式$
字符仅返回字符串末尾.inf
的位置。