当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 如何在操作中使用 ScriptRunner“FilePicker”查询

作者:精品下载站 日期:2024-12-14 08:12:01 浏览:14 分类:玩电脑

如何在操作中使用 ScriptRunner“FilePicker”查询


[玩转系统] 如何在操作中使用 ScriptRunner“FilePicker”查询

由于我们与ScriptRunner用户密切交流,他们的许多建议和想法已被纳入该软件中。使用 ScriptRunner,您可能已经注意到尚无法上传文件进行处理。我们正在做这件事!该功能目前正在开发中,将包含在下一版本 Portal Edition R4 中。在下面的文章中,我们将介绍一种在 ScriptRunner 中处理不同类型文件的解决方法,这样您就不必等到 Portal Edition R4 的发布。

我们在 PowerShell 中编写了一个查询脚本,可以通过对话框选择文件,然后在操作中处理这些文件的内容。在本文的末尾,您将找到有关如何创建和使用查询的完整说明。该脚本当前仅适用于网络共享、相应的 UNC 路径以及具有网络共享权限的相应凭据。
有两种方法可以从相应的路径检索数据。在第一个变体中,定义是在 ScriptRunner 目标中完成的。在第二种变体中,在脚本中使用 $PSDrive。

变体 #1 - 目标中的凭证

有权访问共享的凭据在目标中指定。我们使用一个简单的 AD 帐户,并将网络共享的权限作为凭据。

[玩转系统] 如何在操作中使用 ScriptRunner“FilePicker”查询

目标的结构必须如下:

[玩转系统] 如何在操作中使用 ScriptRunner“FilePicker”查询

[玩转系统] 如何在操作中使用 ScriptRunner“FilePicker”查询

目标本身必须创建为“本地执行”并在“简单运行进程模式”下运行。

注意如果脚本中存在“PSCredential”类型的参数,并且它们包含值,则查询或操作将不会启动,因为在“Run-as”模式下不支持 PSCredential 参数。这也在目标中作为注释文本指出。

变体 #2 - 凭证作为参数

具有共享权限的凭据将传递给参数“$DomainAccount”。 UNC 路径和凭据将映射到 PSDrive,然后可以检索或使用。查询完成后,再次关闭与PS驱动器的连接,并删除PS驱动器。如果您想保险起见,还可以注释脚本中 try-catch 块的“Finally”区域。

[玩转系统] 如何在操作中使用 ScriptRunner“FilePicker”查询

更优雅的变体当然是第二种,因为这里保留了灵活性,并且不一定依赖于具有合适凭据的目标。在这两种变体中,脚本本身无需进行任何更改。逻辑就在代码里面。

该脚本仅在包含“_QUERY_”标记的情况下才能在查询中使用。可以通过脚本名称(“QRY_Get-FileFromPath.ps1”)、在脚本本身的“设置适当的标签”区域中手动分配标签,或者通过复选框“这是一个返回查询结果列表的查询脚本”来分配标签。 “在同一地区。在下面的屏幕截图中,您可以看到相应的标签,它被标记为黄色:

[玩转系统] 如何在操作中使用 ScriptRunner“FilePicker”查询

如何使用脚本?让我们借助几张屏幕截图来看看该过程。

步骤1

在第一步中,创建“使用脚本”类型的查询。

[玩转系统] 如何在操作中使用 ScriptRunner“FilePicker”查询

第2步

现在为查询选择一个合适的名称,并将“缓存策略”设置为“不缓存实时查询”和“...自动查询执行”。仅当查询自动启动时才需要最后一点。还可以手动输入 UNC 路径并通过“级联”传递到查询,为此,在复选框中取消选择该选项。

[玩转系统] 如何在操作中使用 ScriptRunner“FilePicker”查询

步骤3

根据您选择的变体,现在会存储相应的目标。使用参数中的凭据,配置应如屏幕截图所示。查询通过“直接服务执行”运行,并且包括凭据的网络路径被映射到 PSDrive。

注意: PSDrive 获取 GUID 作为名称。因此该名称是唯一的,不会与其他驱动器或类似的驱动器发生冲突。

$Include 参数指定搜索哪些文件扩展名。如果该参数留空,则显示所有文件。例如,如果您只想显示 TXT 文件,则条目必须是 *.txt。

[玩转系统] 如何在操作中使用 ScriptRunner“FilePicker”查询

如果您希望通过目标对共享进行授权,则 $DomainAccount 参数必须保留为空,并且目标将设置为如上所述的目标。

步骤4

现在可以测试查询了。如果一切设置正确,结果应如下所示:

[玩转系统] 如何在操作中使用 ScriptRunner“FilePicker”查询

以下是提供完整概述的完整代码:

<#
.SYNOPSIS
.DESCRIPTION
.NOTES
.COMPONENT
.LINK
.Parameter NetworkPath
	[sr-en] Enter filepath in UNC format
    [sr-de] Bitte den Verzeichnispfad im UNC Format eintragen
    .Parameter Include
    [sr-en] Specify the file extensions (e.g. *.csv)
    [sr-de] Nach Dateiendungen filtern (z.B. *.csv)
    .Parameter DomainAccount
    [sr-en] Specify a domain account with permission for the network share
    [sr-de] Bitte einen Domänen Benutzer mit Berechtigungen für das Netzlaufwerk eintragen
    #>
    
    param (
    	[ValidatePattern('(?:[^"/:*?"<>|\r\n]+\)*[^"/:*?"<>|\r\n]*')]
    	[string]$NetworkPath,
    	[string]$Include,
    	[pscredential] $DomainAccount
    )
    
    try	{
    	if	($null -ne $DomainAccount) {
        	try	{
            	$GUID = [guid]::NewGuid().toString()
            	[hashtable]$cmdArgs = @{
            		"Name" = $GUID
            		"PSProvider" = "FileSystem"
            		"Root" = $NetworkPath
            		"Credential" = $DomainAccount
            	}
            	$PSDrive = New-PSDrive @cmdArgs
            	$TestPath = Test-Path -Path $PSDrive.Root
            	if	($TestPath -eq "True") {
            		$Files = Get-ChildItem -Path $PSDrive.Root -Include $Include -File
				if	($null -ne $Files) {
                	foreach	($itm in $Files) {
                		if	($null -ne $SRXEnv) {
             				$null = $SRXEnv.ResultList.Add($itm)
                    		$null = $SRXEnv.ResultList2.Add("$($itm.Name)")    
               			}
               			else {
                			Write-Output "$($itm.Name)"
                		}      
 					}  
				}
				else {
            		Write-Output "No files in specified folder $($PSDrive.Root) found."
 				}   
				}
				else {
					Write-Output "Either path $($PSDrive.Root) does not exist or access is denied!"
				}
			}
			catch {
				throw
			}
			finally {
				<#if ($PSDrive) {
  					Remove-PSDrive -Name $GUID
				}#>  
			}   
 		}
		else {
			$TestPath = Test-Path -Path $NetworkPath 
					if 	($TestPath -eq "True") { 
						$Files = Get-ChildItem -Path $NetworkPath -Include $Include -File
						if ($null -ne $Files) {
							foreach ($itm in $Files) {
								if ($null -ne $SRXEnv) {
									$null = $SRXEnv.ResultList.Add($itm)
									$null = $SRXEnv.ResultList2.Add("$($itm.Name)")    
								}
								else {
 									Write-Output "$($itm.Name)"
								}      
							}  
						}
						else {
							Write-Output "No files in specified folder $($NetworkPath) found."
						}
                    
					}
					else {
						Write-Output "Either path $($NetworkPath) does not exist or access is denied!"
					} 
				}     
			}
			catch {
				throw 
			}         

结论

当然,还有其他方法可以在 ScriptRunner Actions 中处理文件。此外,可以自定义此脚本以显示目录中的子文件夹。在 ScriptRunner 默认合并该功能之前,这只是一个小解决方法。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯