SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




Title Column umbenennen via PowerShell

Geprüfte Antwort Dieser Beitrag hat 11 Antworten

Ohne Rang
282 Beiträge
MStel erstellt 14 Okt. 2015 10:03
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo,

ich habe nun wirklich extrem viel versucht um mittels PowerShell meine Title Spalte innerhalb einer Liste umzubenennen, alles vergeblich.
Da ich meine Title Spalte über Weboberfläche sehr einfach umbenennen kann, dachte ich mir dies wäre auch mit PowerShell möglich, habe auch unzählige Snippets gefunden, jedoch keines mag bei mir gewünschten Effekt auslösen. Bei anderen Spalten ist dies ebenfalls kein Problem.

Erst mal ein Paar Informationen zu meiner bisherigen Vorgehensweise:
Da bei Erstellung jeder meiner Listen die Title Spalte automatisch angelegt wird ( Interner Name Title, DisplayName Titel, wegen deutscher SPSite Vorlage), ich die Spalte aber nur innerhalb einer Liste umbenennen muss (Titel -> Name), ist schon einmal der Zeitpunkt der Umbenennung relevant.

Was ich also bisher versucht habe(powershell):
- Umbenennen der Title Spalte als Websitespalte vor Erzeugung der Listen
- Nachträgliches Umbenennen der Title Spalte auf Listenebene mit
- Erstellen eines eigenen Inhaltstyps, löschen des Standardinhalttypes, hinzufügen der Title Spalte zum Inhaltstyp und anschließend umbenennen der Title Spalte auf Content Type Ebene

Bei jedem dieser Ansätze habe ich sowohl das Feld versucht über GUID auszuwählen, über den Internal Name, als auch (nur um Sicherzugehen) über den Displayname, und auch korrekte gefüllte Werte erhalten.(Habe mir zur Kontrolle eine Variable erstellt und diese ausgeben lassen)
Nachdem ich mein Feld (Title) innerhalb einer Variable hatte, habe versucht die Eigenschaften "DisplayName" und "Title" neu zu setzen. Anschließend habe ich das Feld, die Liste, und den Inhaltstyp (je nach Vorgehensweise) geupdated und dafür auch den $true Parameter verwendet um Veränderungen aus bestehende Instanzen anzuwenden.

Jetzt kommt erst das Witzige:
Auf meiner lokalen Maschine (Windows 7 64 Bit) funktioniert dies einwandfrei, ich erhalte keine Fehlermeldungen vom Skript, und die Title Spalte wird zu Name umbenannt. (wie gewünscht)
Auf der Zielmaschine (Windows Server 2008) mag dies einfach nicht funktionieren, und die Title Spalte heißt weiterhin Titel, anstatt Name. Fehlermeldungen erscheinen ebenfalls nicht. In den Logs steht auch nichts.
Bin dort wie auf meiner lokalen Maschine Farmadmin, lokaler Admin sowie SpShellAdmin.

Wohl eine erwähnenswerte Information ist noch, dass der Windows Server ein englisches Betriebssystem hat und mein Windows 7  ein deutsches, allerdings sollte dies doch keinerlei Auswirkungen haben, da ich das Feld über internen Name auswähle? Das kann eigentlich nur die einzige Ursache sein.

Der Rest funktioniert auch auf dem Windows Server einwandfrei (handelt sich um 4000 Codezeilen, nur an dieser Stelle ist ein Unterschied in der Funktionalität).

Und bitte keine Antworten wie "Erstell dir doch einfach eine Spalte die Name heißt", ich verwende bewusst die Title Spalte wegen dem Link zum Item.

Bitte um Hilfe ..

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 14 Okt. 2015 10:41
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das Ganze ist eigentlich ziemlich einfach: erstelle die Liste und hole Dir von der Liste die Spalte über $list.Fields["Title"]. Das hast Du ja alles schon.

Jetzt muß man aber aufpassen. In mehrsprachigen Umgebungen funktionieren die einfachen Properties wie Title oder auch Description nicht. Man muß stattdessen die entsprechenden TitleResource bzw. DescriptionResource verwenden und dort pro Culture einen Wert angeben.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
282 Beiträge
MStel Als Antwort am 14 Okt. 2015 11:14
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut
Also quasi vor der ersten Verwendung der Title-Spalte 1x $Web.TitleResource.SetValueForUICulture($Web.UICulture, "Name") und damit ist die Sache gegessen? :o
Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 14 Okt. 2015 11:46
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Nicht $web.TitleResource (das ändert den Namen der Website), sondern auf dem Feld. Und mit der genannten Zeile setzt Du natürlich nur den Wert für die Standardsprache des Webs, nicht für alle anderen, die es evtl. gibt.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
282 Beiträge
MStel Als Antwort am 14 Okt. 2015 13:26
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

$field = $list.Fields["Titel"]
$field.TitleResource.SetValueForUICulture(1031,"Name");
meinst du das?

Wenn nicht, kannst du bitte an einem Beispiel demonstrieren was du meinst?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 14 Okt. 2015 13:34
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Genau das meine ich. Achtung: immer die internen Namen verwenden, sonst klappt das nicht zuverlässig. Hier also

$field = $list.Fields["Title"]
oder
$field = $list.Fields.GetFieldByInternalName("Title")
oder
$field = $list.Fields[[Microsoft.SharePoint.SPBuiltInFieldId]::Title]

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
282 Beiträge
MStel Als Antwort am 14 Okt. 2015 14:07
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Leider passiert dennoch nichts.

$list = $SPWeb.Lists["meineListe"];
$field = $list.Fields.GetFieldByInternalName("Title")
$field.Title = "neuerName";
$field.TitleResource.SetValueForUICulture(1031,"neuerName");
$field.TitleResource.SetValueForUICulture(1033,"neuerName");
$field.Update();
$list.Update();
$list.Update($true);

 

*edit
auf meiner lokalen Maschine heißt die Spalte hinterher "neuerName", auf dem Windows Server 2008 unter der identischen Webanwendung allerdings nicht.

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 14 Okt. 2015 14:20
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Da habe ich ehrlich überhaupt keine Idee mehr :-(

Ich nehme an, daß Du auf dem Zielsystem nicht debuggen kannst. Also wird Dir nur umfangreiches Logging in eine Datei bleiben um ganz genau zu sehen, was läuft und was nicht.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
282 Beiträge
MStel Als Antwort am 14 Okt. 2015 14:29
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Besteht denn die Möglichkeit sich so ein Feld mit Link zum Item selbst zu bauen?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 14 Okt. 2015 14:46
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ungetestet:

$otherField.LinkToItem = $true
$otherField.ListItemMenu = $true
$otherField.ListItemMenuAllowed = [Microsoft.SharePoint.SPField.ListItemMenuState]::Required
$otherField.Update()

Edit: ich würde trotzdem beim Standardfeld Title bleiben und versuchen es umzubennenen.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
282 Beiträge
MStel Als Antwort am 14 Okt. 2015 15:02
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Wäre mir auch lieber.
Ok danke für deine Geduld, falls ich tatsächlich eine Lösung finde werde ich sie hier dann nochmal publizieren.

Ich teste dann mal noch ein bisschen rum und versuche zu ergründen worin der Unterschied zwischen SP 2010 auf einem Windows Server und auf einem Normalen Betriebssystem liegt.

Ohne Rang
282 Beiträge
MStel Als Antwort am 15 Okt. 2015 10:22
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich habe mein Problem zwar lösen können, nachvollziehen was ich da allerdings getan habe kann ich nicht.

Ich füge mal den Code an den ich verwendet habe, bewirkt, dass sowohl auf einem Deutschem Windows 7 als auch auf einem englischem Windows Server 2008 auf einer identischen Website die Titel Spalte in "Vor- und Nachname" umbenannt wird.
Habe leider die Erfahrung gemacht, dass sobald eine einzige Zeile fehlt(auch die fld.Title im zweiten Abschnitt), dies nicht mehr der Fall ist. Also auch wenn jetzt alles doppelt und dreifach ausgeführt wird, hier mein funktionierender Code, wenn ihr irrelevante Zeilen findet könnt ihr diese immer noch entfernen:

$web = Get-SPWeb -identity $myWeb
$list = $web.Lists["Personen"]
$field = $list.Fields.GetFieldByInternalName("Title")
$field.Title = "Vor- und Nachname";
$field.TitleResource.SetValueForUICulture(1031,"Vor- und Nachname");
$field.TitleResource.SetValueForUICulture(1033,"Vor- und Nachname");
$field.TitleResource.Value = "Vor- und Nachname";
$field.Update();
$field.Update($true);
$list.Update();
$list.Update($true);

$w=Get-SPWeb –identity $myWeb
$spListName = "Personen"; 
 $fld= $w.Lists[$spListName].Fields["Titel"] 
 $fld.Title = "UnwichtigWasHierSteht"
 $fld.Update() 
$w=Get-SPWeb –identity $myWeb
$spListName = "Personen"; 
$fld= $w.Lists[$spListName].Fields["Title"] 
$fld.Title = "UnwichtigWasHierSteht"
$fld.Update() 

MFG
MStel