我如何使用 Powershell 从 SQL 查询中获取输出并在另一个文件中搜索该输出
How doI use Powershell to take output from a SQL query and search another file for that output
这是我第一次使用Powershell,所以请原谅我的无知。
我有一个 SQL 查询 returns 返回一堆订单号。我想检查另一个文件以查看该文件中是否存在与 SQL 查询返回的订单号同名的现有 PDF。
我的代码中的所有内容都可以正常运行,直到 ForEach 循环 returns 什么都没有。根据我的 google 搜索,我认为我非常接近,但我不确定我做错了什么。任何帮助,将不胜感激。
出于显而易见的原因,我已经删除了实际的文件名,而且我知道该文件是正确的并且其他命令确实可以访问它,所以我知道这不是我目前的问题。我还从 SQL 查询中删除了敏感信息。
$statement = "SELECT A, Date FROM XXXX
WHERE STAT = 1 AND Date >= trunc(sysdate)"
$con = New-Object System.Data.OracleClient.OracleConnection($connection_string)
$con.Open()
$cmd = $con.CreateCommand()
$cmd.CommandText = $statement
$result = $cmd.ExecuteReader()
$list = while ($result.Read()) { $result["A"]}
Write-Output $list
#########Loop through the list above here to check for matching PDF
ForEach ($Order in $list){
Get-ChildItem "\xxxxxx\" -Filter $Order -File
#########If FALSE - notify that PDF is missing
}
$con.close()
我也试过下面的代码,它让我更接近并且实际上找到了我正在寻找的文件,但是给出了错误
" Get-ChildItem: 找不到接受参数的位置参数
- CategoryInfo : InvalidArgument: (:) [Get-ChildItem], ParameterBindingException
- FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand"
ForEach ($Order in $list){
if((Get-ChildItem "\xxxxx\" + $Order)){
Write-Output
} else { Write-Host "Does not exist."}
我从您的评论中得知 $list
是一个订单号数组。
接下来,您想检查文件夹中是否有同名文件,对吗?
那么我建议你使用 Test-Path
而不是 Get-ChildItem
:
$folderToSearch = '\servername\sharename\folder'
foreach ($Order in $list) {
$fileToCheck = Join-Path -Path $folderToSearch -ChildPath ('{0}.pdf' -f $Order)
if (Test-Path -Path $fileToCheck -PathType Leaf) {
"File found: $fileToCheck"
}
else {
"File $fileToCheck does not exist"
}
}
这是我第一次使用Powershell,所以请原谅我的无知。
我有一个 SQL 查询 returns 返回一堆订单号。我想检查另一个文件以查看该文件中是否存在与 SQL 查询返回的订单号同名的现有 PDF。
我的代码中的所有内容都可以正常运行,直到 ForEach 循环 returns 什么都没有。根据我的 google 搜索,我认为我非常接近,但我不确定我做错了什么。任何帮助,将不胜感激。
出于显而易见的原因,我已经删除了实际的文件名,而且我知道该文件是正确的并且其他命令确实可以访问它,所以我知道这不是我目前的问题。我还从 SQL 查询中删除了敏感信息。
$statement = "SELECT A, Date FROM XXXX
WHERE STAT = 1 AND Date >= trunc(sysdate)"
$con = New-Object System.Data.OracleClient.OracleConnection($connection_string)
$con.Open()
$cmd = $con.CreateCommand()
$cmd.CommandText = $statement
$result = $cmd.ExecuteReader()
$list = while ($result.Read()) { $result["A"]}
Write-Output $list
#########Loop through the list above here to check for matching PDF
ForEach ($Order in $list){
Get-ChildItem "\xxxxxx\" -Filter $Order -File
#########If FALSE - notify that PDF is missing
}
$con.close()
我也试过下面的代码,它让我更接近并且实际上找到了我正在寻找的文件,但是给出了错误
" Get-ChildItem: 找不到接受参数的位置参数
- CategoryInfo : InvalidArgument: (:) [Get-ChildItem], ParameterBindingException
- FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand"
ForEach ($Order in $list){
if((Get-ChildItem "\xxxxx\" + $Order)){
Write-Output
} else { Write-Host "Does not exist."}
我从您的评论中得知 $list
是一个订单号数组。
接下来,您想检查文件夹中是否有同名文件,对吗?
那么我建议你使用 Test-Path
而不是 Get-ChildItem
:
$folderToSearch = '\servername\sharename\folder'
foreach ($Order in $list) {
$fileToCheck = Join-Path -Path $folderToSearch -ChildPath ('{0}.pdf' -f $Order)
if (Test-Path -Path $fileToCheck -PathType Leaf) {
"File found: $fileToCheck"
}
else {
"File $fileToCheck does not exist"
}
}