我有以下腳本從 URI 獲取報告并顯示資料源用戶名。但是,我們想獲取報告的名稱,以便我們知道哪個資料源用戶名與哪個報告相關聯,以便進行跟蹤。
listReports() 函式決議每個報告并回傳其 ID return $_.Id
報告 ID 是一個類似于
12b1657c-dc07-5b35-afc0-b0d6c9047860
該$_物件還具有其他有意義的屬性,例如$_.Name和$_.Path
完整腳本的當前輸出(來自最后一個 foreach 回圈)是資料源用戶名串列(不是報告 ID):
TKCSIMPORT
payroll
si_51932_p_00h
payroll
payroll
tkcsimport
這是我們想要的,但我也想顯示與每個用戶名關聯的報告名稱/路徑,例如預期輸出:
DS Username Report Name
TKCSIMPORT Report1
payroll Report2
si_51932_p_00h Report3
payroll Report3
payroll Report4
tkcsimport Report5
我該怎么做呢?
我會嘗試return $_.Id, $_.Name, $_.Path,listReports()但挑戰是如何在這里映射額外的屬性@(listReports("http://pbi.domain.gm.com/reports"))
完整腳本:
# lists all the reports on the server that are available to your user account
Function listReports($baseURL) {
$reports = Invoke-RestMethod -UseDefaultCredentials -uri "$baseURL/api/v2.0/CatalogItems"
$reports.value | Where-Object {$_.Type -eq "PowerBIReport"} | foreach {
#Write-Host ("{0} {1} {2}" -f $_.Id, $_.Name, $_.Path)
return $_.Id
}
}
Function getDataSources($baseURL, $reportID) {
$sources = Invoke-RestMethod -UseDefaultCredentials -uri "$baseURL/api/v2.0/PowerBIReports($reportID)/DataSources"
if ($sources.value -is [array]) {
return $sources.value
} else {
return @($sources.value)
}
}
$reportIDs = @(listReports("http://pbi.domain.com/reports"))
foreach($reportID in $reportIDs) {
(getDataSources "http://pbi.domain.com/reports" $reportID | % {
return $_.DataModelDataSource.Username
})
}
uj5u.com熱心網友回復:
警告。這是一個說明性的例子。這不是您特定代碼的解決方案
[System.Environment]::GetEnvironmentVariables()回傳一個HashTable,.GetEnumerator()回傳一個遍歷集合的 IEnumerator。Enumerator 的每個元素都有兩個屬性Key和Value。在此示例中,我選擇Key、Value,第三個屬性被計算為命名為Size。
該陳述句@{ Name="Size"; Expression = {$_.Value.Length}}是第三個自定義選定屬性。
Name="Size" 是計算屬性的名稱
Expression = {$_.Value.Length}是計算屬性的值。在這種情況下,是 Value 屬性的 Length。
{$_.Value.Length} 是一個回傳值的腳本塊。
$_ 是管道上當前物件的值。
代碼
# //Selecting all objects
$enumerator = [System.Environment]::GetEnvironmentVariables().GetEnumerator() | `
Select-Object -Property Key, Value, @{ Name="Size"; Expression = {$_.Value.ToString().ToUpper() }}
# //Alternative solution with PS Custom Objects. Thanks to https://stackoverflow.com/users/8397835/cataster
$enumerator2 = [System.Environment]::GetEnvironmentVariables().GetEnumerator() | Foreach-Object{
[PSCustomObject]@{
Key = $_.Key
Value = $_.Value
Size = $_.Value.Length
}
}
# //Printing all selected objects
$enumerator | ForEach-Object {
Write-Host "{ Key= $($_.Key), Value= $($_.Value), Size= $($_.Size) }"
}
# //Print all selected objects as list, all properties
$enumerator | Format-List
# //Print all selected objects as table, specific properties
$enumerator | Format-Table -Property Key, Size
輸出說明示例
{ Key= TEMP, Value= C:\Users\Megam\AppData\Local\Temp, Size= 33 }
{ Key= PSModulePath, Value= C:\Users\Megam\Documents\PowerShell\Modules;C:\Program Files\PowerShell\Modules;c:\program files\powershell\7\Modules;C:\Program Files\WindowsPowerShell\Modules;C:\Windows\system32\WindowsPowerShell\v1.0\Modules;c:\Users\Megam\.vscode\extensions\ms-vscode.powershell-2021.12.0\modules, Size= 284 }
{ Key= HOMEDRIVE, Value= C:, Size= 2 }
{ Key= APPDATA, Value= C:\Users\Megam\AppData\Roaming, Size= 30 }
{ Key= LANG, Value= en_US.UTF-8, Size= 11 }
{ Key= PATHEXT, Value= .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL, Size= 58 }
{ Key= CommonProgramFiles(x86), Value= C:\Program Files (x86)\Common Files, Size= 35 }
{ Key= ProgramData, Value= C:\ProgramData, Size= 14 }
{ Key= PROCESSOR_ARCHITECTURE, Value= AMD64, Size= 5 }
{ Key= VSCODE_GIT_ASKPASS_EXTRA_ARGS, Value= --ms-enable-electron-run-as-node, Size= 32 }
{ Key= TERM_PROGRAM_VERSION, Value= 1.63.2, Size= 6 }
{ Key= ProgramFiles(x86), Value= C:\Program Files (x86), Size= 22 }
{ Key= SystemDrive, Value= C:, Size= 2 }
{ Key= USERDOMAIN, Value= DESKTOP-9EPNRSP, Size= 15 }
{ Key= COLORTERM, Value= truecolor, Size= 9 }
{ Key= ProgramW6432, Value= C:\Program Files, Size= 16 }
{ Key= HOMEPATH, Value= \Users\Megam, Size= 12 }
{ Key= TERM_PROGRAM, Value= vscode, Size= 6 }
{ Key= CommonProgramW6432, Value= C:\Program Files\Common Files, Size= 29 }
{ Key= windir, Value= C:\Windows, Size= 10 }
作為串列
Key : CHROME_CRASHPAD_PIPE_NAME
Value : \\.\pipe\crashpad_9536_MITAYLIDBVJOLRAM
Size : 39
Key : PUBLIC
Value : C:\Users\Public
Size : 15
Key : COLORTERM
Value : truecolor
Size : 9
Key : APPDATA
Value : C:\Users\Megam\AppData\Roaming
Size : 30
Key : ComSpec
Value : C:\Windows\system32\cmd.exe
Size : 27
Key : NUMBER_OF_PROCESSORS
Value : 8
Size : 1
Key : PSModulePath
Value : C:\Users\Megam\Documents\PowerShell\Modules;C:\Program Files\PowerShell\Modules;c:\program files\powershell\7\Modules;C:\Program Files\Windows
PowerShell\Modules;C:\Windows\system32\WindowsPowerShell\v1.0\Modules;c:\Users\Megam\.vscode\extensions\ms-vscode.powershell-2021.12.0\modules
Size : 284
Key : COMPUTERNAME
Value : DESKTOP-9EPNRSP
Size : 15
Key : ProgramFiles(x86)
Value : C:\Program Files (x86)
Size : 22
Key : SESSIONNAME
Value : Console
Size : 7
如表
Key Size
--- ----
PROCESSOR_LEVEL 1
ALLUSERSPROFILE 14
HOMEDRIVE 2
InsaneAppName 59
PSExecutionPolicyPreference 12
GIT_ASKPASS 100
AppName 49
VSCODE_GIT_ASKPASS_NODE 64
TMP 33
PROCESSOR_REVISION 4
OneDriveConsumer 23
XXX__YYY 32
SystemRoot 10
VSCODE_GIT_IPC_HANDLE 35
SystemDrive 2
PROCESSOR_ARCHITECTURE 5
IntelliJ IDEA 54
CommonProgramW6432 29
ProgramFiles 16
windir 10
HOMEPATH 12
USERNAME 5
TERM_PROGRAM 6
USERDOMAIN_ROAMINGPROFILE 15
VSCODE_GIT_ASKPASS_EXTRA_ARGS 32
POWERSHELL_DISTRIBUTION_CHANNEL 4
LOGONSERVER 17
USERPROFILE 14
Path 635
TEMP 33
USERDOMAIN 15
CommonProgramFiles 29
PATHEXT 58
CommonProgramFiles(x86) 35
ProgramData 14
ORIGINAL_XDG_CURRENT_DESKTOP 9
OS 10
OneDrive 23
LANG 11
TERM_PROGRAM_VERSION 6
ProgramW6432 16
DriverData 38
VSCODE_GIT_ASKPASS_MAIN 105
LOCALAPPDATA 28
PROCESSOR_IDENTIFIER 50
CHROME_CRASHPAD_PIPE_NAME 39
PUBLIC 15
COLORTERM 9
APPDATA 30
ComSpec 27
NUMBER_OF_PROCESSORS 1
PSModulePath 284
COMPUTERNAME 15
ProgramFiles(x86) 22
SESSIONNAME 7
參考常用管道命令中的
Select-Object自定義運算式示例 11:為每個 InputObject 創建計算屬性Format-List Format-Table
██████ 更新你的代碼 你可以使用這個
# //Select Id, Name, Path, UpperName(custom), PathSize(custom) properties.
$reports.value | Where-Object {$_.Type -eq "PowerBIReport"} | Select-Object -Property Id, Name, Path, @{ Name="UpperName"; Expression={$_.Name.ToString().ToUpper()}}, @{ Name="PathSize"; Expression={$_.Path.Length}}
uj5u.com熱心網友回復:
我想出了一個巧妙的方法來使用 pscustomobjects 完成我想要的!
$webPortalURL = "https://pbi.domain.com/reports"
Function listReports($baseURL) {
$reports = Invoke-RestMethod -UseDefaultCredentials -uri "$baseURL/api/v2.0/CatalogItems"
$reports.value | Where-Object {$_.Type -eq "PowerBIReport"} | foreach {
[PSCustomObject]@{
Id = $_.Id
Name = $_.Name
Path = $_.Path
}
}
}
Function getDataSources($baseURL, $reportID) {
$sources = Invoke-RestMethod -UseDefaultCredentials -uri "$baseURL/api/v2.0/PowerBIReports($reportID)/DataSources"
if ($sources.value -is [array]) {
return $sources.value
} else {
return @($sources.value)
}
}
$reportList = @(listReports($webPortalURL))
$ReportsDatasourceUsernames_pscoArray = @()
$loopCount = 1
foreach($report in $reportList) {
(getDataSources $webPortalURL $report.Id | % {
#return $_.DataModelDataSource.Username
$ReportsDatasourceUsernames_pscoArray = [PSCustomObject]@{
'#' = $loopCount
'Datasource Username' = $_.DataModelDataSource.Username
'Report Name' = $report.Name
'Report Path' = <#"=HYPERLINK(""$($webPortalURL `"/powerbi`" $($report.Path))"",""$($report.Name)"")"#> "<a href='$($webPortalURL `"/powerbi`" $($report.Path))'>$($report.Name)</a>"
#'Status' = "$($error[0])`r`n$($error[0].InvocationInfo.PositionMessage)`r`n$($error[0].ScriptStackTrace)"
}
})
$loopCount
}
$ReportsDatasourceUsernames_pscoArray
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/418564.html
標籤:
