auf ein Beispiel in dem Dateisystem aussehen lassen: PS> dir foo* Directory: C:\Users\jimtru\AppData\Local\Temp Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 6/1/2016 11:11 AM 11 foo[bar].'baz' -a---- 6/1/2016 11:13 AM 8 foo[bar].`baz`
das erste, was zu bemerken ist, gibt es Anführungszeichen (Einzel- und zurück), die einfach gemacht werden, jedoch keine zusätzlichen Zeichen Hemmung in der Ausgabe, die anzeigt, verursachen diese könnten ein wenig Sodbrennen Powershell, wenn Sie nur versuchen, ihre Inhalte zu erhalten:
PS> get-content foo[bar].'baz' get-content : An object at the specified path foo[bar].baz... PS> get-content foo[bar].`baz`... get-content : An object at the specified path foo[bar]az`
gibt es ein paar Möglichkeiten, um Dies. Wir bieten -LiteralPath
für einige Cmdlets: PS> get-content -LiteralPath "foo[bar].'baz'" sdflkj
Beachten Sie, dass ich doppelte Anführungszeichen um die Zeichenfolge enthalten haben. Dies liegt daran, dass die einfachen Anführungszeichen als String-Element behandelt würden, sodass durch foo
ersetzt würde. Die doppelten Anführungszeichen geben an, dass der Parser die gesamte Zeichenfolge (double-quote-to-double-quote) betrachten sollte. Eine andere Möglichkeit ist das Verwenden des Escape-Zeichens (Rückwärts-Anführungszeichen). PS> get-content 'foo`[bar`].`baz`' sdflkj
Wie für Pfade, die identisch sind, würde ich vorschlagen, dass Sie das vermeiden. Sie brauchen einen Weg, um eine Entität von einer anderen zu unterscheiden. Sie sollten sicherstellen, dass der von Ihnen erstellte Pfad für Ihre Ressource eindeutig ist. Denken Sie daran, dass Sie diesen Pfad in Ihrem Provider erstellen, damit Sie die Entscheiderfunktionen als Teil Ihres Providers hinzufügen können.
Schließlich gibt es Einschränkungen für die Länge, die als Pfad auf dem Dateisystem ausgedrückt werden kann. AFIK, gibt es keine Einschränkungen für nicht-Pfad "Pfade"
Nur für den Fall, dass die Dokumente [hier] sind (https://msdn.microsoft.com/en-us/library/ee126186 (v = vs.85) .aspx) 1) Hoffentlich würde Path Escaping nur darum gehen, wie Sie die Zeichenfolge eingeben. Wenn es nicht ist, denke ich, dass Sie das in Ihrem Provider handhaben müssen. 2) Ich glaube nicht, dass das Provider-Framework den Pfad explizit begrenzt. 4) Ihr Provider müsste verstehen, wie man damit umgeht. Wie würdest du mit Get-Item umgehen, wenn es zwei Items gibt? – TravisEz13
@TravisPlunk, etwa 4) da sie Objekte sind, können sie programmgesteuert gehalten und gefiltert werden. Sie haben Einzigartigkeit, aber die Einzigartigkeit ist nicht einfach im Namen. Beispielsweise können viele E-Mails den gleichen Titel, aber unterschiedliche zugrunde liegende eindeutige IDs haben. Der E-Mail-Titel scheint dem PowerShell-Namen natürlich zuzuordnen. Ich möchte nur sichergehen, dass dies in PowerShell akzeptiert wird. – bright
@TravisPlunk, überdenken Sie Ihren Kommentar als Antwort. Über 1) Ich habe in dem von Ihnen bereitgestellten Link keine Informationen zu den Trennzeichen für austretende Pfade gefunden. Habe ich etwas verpasst? – bright