Powershell consultando a lista do Sharepoint

1

Estou lutando com um script que consulta o SharePoint.

Esse script deve consultar uma lista de sharepoint, gerar uma saída e, em seguida, corrigir os servidores. Aqui é a parte que eu estou lutando com ..
Quando eu executo eu recebo este erro:

Exceção chamando "GetListItems" com argumento (s) "7": "Exceção do tipo" Microsoft.SharePoint.So apServer.SoapServerException 'foi lançado. " Em C: \ Scripts \ AUpdate \ iPatch2.ps1: 472 char: 33 + $ list = $ SiteWS.GetListItems < < < < ($ ListName, $ ViewGuid, $ query, $ null, $ null, $ queryOptions, $ nul eu)     + CategoryInfo: NotSpecified: (:) [], MethodInvocationException     + FullyQualifiedErrorId: DotNetMethodException

Alguém pode ajudar por favor?

# 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 }
}
    
por user98805 24.10.2011 / 17:30

1 resposta

1

Eu não tive problemas com os nomes de lista que possuem espaços neles.

[string] $ListName = 'Automated Patching' )

Clone a lista e verifique primeiro. Eu perdi tempo suficiente com esse problema que eu sempre tento primeiro. Se for esse o caso, você pode descobrir a citação aninhada do mal que eles usam para espaços ou reimplementar com o nome livre de espaço. (Você pode alterar a exibição do nome para ter um espaço sem alterar o nome fundamental usado quando você cria a lista ... ele ainda ficará bem para o chefe.;)

atualizar IIRC você pode tentar o URL citando primeiro 'Automated%20Patching' , que muitas vezes é suficiente.

    
por 24.10.2011 / 19:25