Domanda

Prima di tutto Ho fatto molto googling e ho persino passato la prima pagina o 2 :) Quindi sentiti libero di indirizzarmi al post appropriato se necessario.

Sto cercando di andare in giro attraverso un grappolo di nastri e sottomarini e le loro librerie di documenti. Dopo aver fatto ogni web, voglio smaltirlo che ho fatto, ma non funziona. Ho provato il "utilizzo" qualificatore ma per qualche motivo è dare il seguente messaggio di errore:

"La parola chiave 'usando' non è supportata in questa versione della lingua."

Ho il codice qui sotto e un'uscita.

In questo esempio ho inserito per la prima volta un URL falso, che è entrato un vero, di nuovo di un falso. Come puoi vedere, nonostante i miei tentativi di chiamare il sito.Sporre che la variabile del sito persiste. Non mito da confidare la variabile per nulla perché penso che possa semplicemente archiviarlo in memoria senza un puntatore.

Sto provando questo in Poweshell Ise su una casella di prova e temo che quando finisco questo codice (che sarà Wayyyyy più pesante) avrà perdite di memoria e risorse per la memoria dappertutto! Per favore aiuto !!

Codice:

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")| out-null

do {
"before init $site"
$site = $null
"after null init $site"
$url = Read-Host 'Site Url is? '
Write-Host "User entered: $url"
try{
    $site = New-Object Microsoft.SharePoint.SPSite($url) 
        Write-Host "Name is: $site"
        $web=$site.openweb()
        Write-Host "web is: $web"

        foreach($lib in $web.Lists){

            if($lib.BaseType -eq [Microsoft.SharePoint.SPBaseType]::DocumentLibrary -and $lib.BaseTemplate -eq [Microsoft.SharePoint.SPListTemplateType]::DocumentLibrary){
                write-host $lib

                foreach($itm in $lib.Items){
                    write-host $itm.Url
                }
            }
        }

}
catch [system.exception]{
    "error with url"
}
finally {    
        if($site -ne $null){
            "not disposed: $site"
            $site.Dispose()
            "after dispose $site"
        }


        if($site -ne $null){
            "not disposed2: $site"
            try{
                $web.Dispose()
                "web disposed"
            }
            catch{
                "web null"
            }
            $site.Dispose()
            "after dispose2 $site"
        }
}
$again = Read-Host 'Again? (y or n) '
Write-Host "User entered: $again"
}
until ($again -eq "n")
.

Uscita:

before init 
after null init 
User entered: fakeurl
error with url
User entered: y
before init 
after null init 
User entered: http://test-site
Name is: SPSite Url=http://test-site
web is: Test Site For Dev
DocumentLogging
DocumentLogging/log.txt
Documents
Documents/test/Testfile.txt
not disposed: SPSite Url=http://test-site
after dispose SPSite Url=http://test-site
not disposed2: SPSite Url=http://test-site
web disposed
after dispose2 SPSite Url=http://test-site
User entered: y
before init SPSite Url=http://test-site
after null init 
User entered: fakeuri
error with url
User entered: n
.

È stato utile?

Soluzione

Ho recentemente avuto un requisito simile, e mi sono imbattuto in alcuni punti di blog utili:

PowerShell usando l'istruzione , Multi-usting usando l'istruzione

Una cosa da notare, è che dovresti chiamare la funzione qualcosa di diverso da "usare" mentre la parola usando verrà un'eccezione simile a quella che hai già visto.

Altri suggerimenti

prova un'istruzione utilizzando la dichiarazione piuttosto che provare a smaltire manualmente.L'utilizzo delle dichiarazioni smaltisce automaticamente l'oggetto che hai istanziato l'istruzione con.Ad esempio:

using ($web = $site.openweb())
{
    Write-Host "web is: $web"

    foreach($lib in $web.Lists){

        if($lib.BaseType -eq [Microsoft.SharePoint.SPBaseType]::DocumentLibrary -and $lib.BaseTemplate -eq [Microsoft.SharePoint.SPListTemplateType]::DocumentLibrary){
            write-host $lib

            foreach($itm in $lib.Items){
                write-host $itm.Url
            }
        }
    }
}
.

e fondamentalmente mette ogni oggetto monouso in una dichiarazione usando come questa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a sharepoint.stackexchange
scroll top