我一直在探索如何使用PowerShell中的Google API。
确保nuget.org是可信任的软件包源
Register-PackageSource -name nuget.org -Location https://www.nuget.org/api/v2 -Provider NuGet -Trusted
安装.NET api软件包:
$googlePackages= @(
'Google.Apis'
'Google.Apis.Core'
'Google.Apis.Discovery.v1'
)
Install-Package -Name $googlePackages
在您的实际脚本中,Add-Type
用于您需要使用的每个程序包的每个程序集。这是很烦人的部分。
程序包包含用于不同平台的程序集。 Add-Type
需要传递正确版本的程序集。下面的功能Add-PackageAssemblies
试图对此进行封装。
Add-Type
将由于缺少类型而失败。通过反复试验,可以找到需要Add-Type
d组装的其他软件包。
function Add-PackageTypes {
Param (
[Parameter(ValueFromPipeline=$true)]
[Microsoft.PackageManagement.Packaging.SoftwareIdentity]
$package
,
$assemblyFilter = "*netstandard2.0*.dll"
)
Process {
$assemblies = get-childitem -path ($package.Source | Split-Path -Parent) -Recurse |
Where-Object {$_.FullName -like $assemblyFilter } |
Select-Object -ExpandProperty FullName
try {
$newTypes = Add-Type -AssemblyName $assemblies -passthru
} catch [System.Reflection.ReflectionTypeLoadException] {
Write-Error "Message: $($_.Exception.Message)"
Write-Error "LoaderExceptions: $($_.Exception.LoaderExceptions)"
}
Write-Output $newTypes
}
}
$types = Get-Package $googlePackages | Add-PackageTypes
最好避免反复试验,并使用包属性查找和加载其他必需的类型。
最后,实际使用API:
$serviceInitializer = New-Object Google.Apis.Services.BaseClientService+Initializer
$serviceInitializer.ApiKey = Get-MySecretGoogleAPIKey
$serviceInitializer.ApplicationName = "DiscoverySamplePowershellApplication"
$discoveryService = New-Object Google.Apis.Discovery.v1.DiscoveryService -ArgumentList $serviceInitializer
$results = $discoveryService.apis.List().Execute()
Write-Output $results.items
有没有更简单的方法?是否已经有解决这些问题的知名模块?