Я борюсь со скриптом, который запрашивает Sharepoint.
Предполагается, что этот сценарий запрашивает список точек доступа, затем генерирует выходные данные и затем исправляет серверы. Вот часть, с которой я борюсь ..
Когда я запускаю его, я получаю эту ошибку:
Исключение при вызове «GetListItems» с аргументом (ами) «7»: «Возникло исключение типа 'Microsoft.SharePoint.So apServer.SoapServerException'». В C: \ Scripts \ AUpdate \ iPatch2.ps1: 472 символа: 33 + $ list = $ SiteWS.GetListItems <<<< ($ ListName, $ ViewGuid, $ query, $ null, $ null, $ queryOptions, $ nul l ) + CategoryInfo: NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId: DotNetMethodException
Кто-нибудь может помочь?
# Gather a list of servers to be patched from a Sharepoint list
function Get-PatchList {
param ( [string] $Uri = 'http://site/_vti_bin/lists.asmx?wsdl',
[string] $Day = $(throw "The Day parameter is required"),
[string] $Time = $(throw "The Time parameter is required"),
[System.Management.Automation.PSCredential] $Credential,
[string] $ViewGuid = '{1DD35D95-E1CB-4DFA-8EFD-63C9342C524A}',
[string] $ListName = 'Automated Patching' )
# initialise return object
$out = @()
# connect to web service
$SiteWS = New-WebServiceProxy -Uri $Uri -Credential $Credential
Write-Verbose "Connecting to web service at $Uri"
Write-Verbose " Connecting using $($Credential.username)"
Write-Verbose " Filtering hosts managed by $thisHost"
# Get the list
[System.Xml.XmlNode] $queryOptions
[System.Xml.XmlNode] $viewFields
#[System.Xml.XmlNode] $query = [xml]"<Query><Where><And><And><Eq><FieldRef Name='TOD'/><Value Type='Text'>$Time</Value></Eq><Eq><FieldRef Name='Day'/><Value Type='Text'>$Day</Value></Eq></And><Or><Eq><FieldRef Name='Status'/><Value Type='Text'>ON</Value></Eq><Eq><FieldRef Name='Status'/><Value Type='Text'>ON In Production</Value></Eq></Or></And></Where></Query>"
[System.Xml.XmlNode] $query = [xml]"<Query><Where><And><And><And><Eq><FieldRef Name='TOD'/><Value Type='Text'>$Time</Value></Eq><Eq><FieldRef Name='Day'/><Value Type='Text'>$Day</Value></Eq></And><Or><Eq><FieldRef Name='Status'/><Value Type='Text'>ON</Value></Eq><Eq><FieldRef Name='Status'/><Value Type='Text'>ON In Production</Value></Eq></Or></And><Eq><FieldRef Name='Server'/><Value Type='Text'>$thisServer</Value></Eq></And></Where></Query>"
$list = $SiteWS.GetListItems($ListName,$ViewGuid,$query,$null,$null,$queryOptions,$null)
#Write-Verbose "Retrieving data with filter " $query
#Parse through the list
foreach ($row in $list.data.row) {
$myhost = New-Object PatchableServer
$myhost.Host = $row.ows_Title
$myhost.Domain = $row.ows_Domain
$myhost.Services = $row.ows_TS
$myhost.Impact = $row.ows_Impact
$out = $out + $myhost
}
return $out
}
# Reformat the list of services from the MOSS format to human-readable
function Parse-Services {
param ( [string] $Services )
[string] $out = ""
if ($Services) {
$split = $Services.Split('#')
$len = $split.Length
if ($len -lt 2) {return $null}
else {
for ($i=1; $i -le $len; $i+=2)
{$out += $split[$i]}
return $out
}
}
else {
return $null
}
}
function Resolve-FQDN {
param ([string] $Identifier)
$myhost = [System.Net.Dns]::GetHostEntry($Identifier)
return $myhost.HostName
}
function Get-HostDomain {
param([string] $Hostname)
$fqdn = Resolve-FQDN -Identifier $Hostname
return $fqdn.TrimStart($Hostname).TrimStart('.')
}
function Get-Ping {
param ([string] $Hostname)
$myhost = gwmi Win32_PingStatus -Filter "Address='$Hostname'"
if ($myhost) { return $myhost.ResponseTime }
else { return $null }
}
У меня не было конца проблем с работой с именами списков, в которых есть пробелы.
[string] $ListName = 'Automated Patching' )
Клонируйте список и сначала проверьте это. Я потратил достаточно времени на эту проблему, поэтому всегда сначала пробую ее. Если это так, вы можете либо выяснить, какие злые вложенные кавычки они используют для пробелов, либо повторно реализовать с именем без пробелов. (Вы можете изменить ОТОБРАЖЕНИЕ имени, чтобы иметь пробел, не меняя основного имени, используемого при создании списка ... оно все равно будет хорошо выглядеть для босса. ;-)
Обновить IIRC, вы можете сначала попробовать цитирование URL 'Automated%20Patching'
, этого часто бывает достаточно.