2015-08-04 2 views
2

J'ai le code PowerShell suivant appelant WSHShell qui va créer un raccourci dans le menu Démarrer pour Win7/8 mais je ne parviens pas à comprendre comment PowerShell pour passer les citations nécessaires autour de la Chemin d'accès UNC avant les arguments dans la ligne cible.Création d'un chemin quoté pour un raccourci avec des arguments dans PowerShell

Ce que je veux: "\\ UNCPATH1 \ Répertoire \ application.exe" Argumenta ArgumentB

Ce que je reçois: \\ UNCPATH1 \ Répertoire \ application.exe Argumenta ArgumentB

code comme actuellement utilisé:

$WshShell = New-Object -comObject WScript.Shell 
$Shortcut = $WshShell.CreateShortcut("$env:ProgramData\Microsoft\Windows\Start Menu\Programs\supercoolprogram\mrincredible.lnk") 
$Shortcut.TargetPath = "\\UNCPATH1\Directory\application.exe" 
$Shortcut.Arguments = "argumentA ArgumentB" 
$Shortcut.WorkingDirectory = "\\UNCPATH1\Directory" 
$Shortcut.Save() 

Modifier avec C Exemples d'odes ... merci à TheMadTechnician et Speerian qui ont tous deux eu des exemples de travail. Windows supprime les chemins indiqués dans le champ cible des raccourcis qui n'ont pas d'espace dans le chemin UNC de l'application. Les deux exemples de code fonctionnent sur des chemins avec des espaces.

$WshShell = New-Object -comObject WScript.Shell 
$Shortcut = $WshShell.CreateShortcut("$env:ProgramData\Microsoft\Windows\Start Menu\Programs\supercoolprogram\mrincredible.lnk") 
$Shortcut.TargetPath = "`"\\UNCPATH1\Directory1\application.exe`"" 
$Shortcut.Arguments = "argumentA ArgumentB" 
$Shortcut.WorkingDirectory = '"\\UNCPATH1\Directory1"' 
$Shortcut.Save() 

ou

$WshShell = New-Object -comObject WScript.Shell 
$Shortcut = $WshShell.CreateShortcut("$env:ProgramData\Microsoft\Windows\Start Menu\Programs\supercoolprogram\mrincredible.lnk") 
$Shortcut.TargetPath = """\\UNCPATH1\Directory 1\application.exe""" 
$Shortcut.Arguments = "argumentA ArgumentB" 
$Shortcut.WorkingDirectory = "\\UNCPATH1\Directory 1" 
$Shortcut.Save() 

Sur le second exemple noter l'espace dans le chemin UNC et la suppression des guillemets simples de WorkingDirectory dans les attributs de raccourci. (les fenêtres seront automatiquement ajoutées ici)

Répondre

2

Placez votre chaîne entre guillemets, donc "\\UNCPATH1\Directory\application.exe" deviendra '"\\UNCPATH1\Directory\application.exe"'.

$WshShell = New-Object -comObject WScript.Shell 
$Shortcut = $WshShell.CreateShortcut("$env:ProgramData\Microsoft\Windows\Start Menu\Programs\supercoolprogram\mrincredible.lnk") 
$Shortcut.TargetPath = '"\\UNCPATH1\Directory\application.exe"' 
$Shortcut.Arguments = "argumentA ArgumentB" 
$Shortcut.WorkingDirectory = '"\\UNCPATH1\Directory"' 
$Shortcut.Save() 

Edit: ... et je me suis trompé. Cela fonctionne pour la propriété WorkingDirectory mais pas la propriété TargetPath. Qu'est-ce que ne travail est de tripler votre chaîne à la place. Donc, cela nous amène à ceci:

$WshShell = New-Object -comObject WScript.Shell 
$Shortcut = $WshShell.CreateShortcut("$([environment]::GetFolderPath("Desktop"))\mrincredible.lnk") 
$Shortcut.TargetPath = """\\UNCPATH1\Directory 1\application.exe""" 
$Shortcut.Arguments = "argumentA ArgumentB" 
$Shortcut.WorkingDirectory = '"\\UNCPATH1\Directory"' 
$Shortcut.Save() 

fonctionne très bien sur Windows 8.1 à tout le moins.

+0

Merci, mais cela me donne toujours la cible UNC non cité comme indiqué ci-dessus. – thatotheritguy

+0

Vous avez raison, je l'ai réparé. – TheMadTechnician

+0

Cela fonctionne pour fournir des citations sur le début dans le champ, Cependant, le champ cible montre encore: \\ UNCPATH1 \ Directory \ application.exe argumentA ArgumentB Y arriver ... J'ai essayé les guillemets doubles et triples, enveloppant dans un seul citation et n'a pas pu obtenir la cible correctement formatée. – thatotheritguy

2

Vous pouvez échapper la citation en utilisant `. C'est l'autre symbole sur la touche "~".

$Shortcut.TargetPath = "`"\\UNCPATH1\Directory\application.exe`"" 
+0

La coche ne force pas les guillemets sur un chemin non espacé. Vous cherchez une méthode pour forcer la citation dans le champ "cible" du raccourci. TheMadTechnician a la syntaxe correcte s'il y a un espace dans le chemin UNC. Et le code fonctionne comme posté pour le "début dans" avec sa syntaxe indépendamment de l'espacement dans le chemin UNC. – thatotheritguy

+0

@thatotheritguy Pour moi, les guillemets sont conservés avec un chemin espacé ou non. Je peux manquer ce que vous voulez dire par "forcer la citation". – Speerian

+0

Lorsque j'utilise ce que vous avez ci-dessus: $ Shortcut.TargetPath = "' "\\ UNCPATH1 \ Directory \ application.exe'" " Je reçois \\ UNCPATH1 \ Directory \ application.exe argumentA ArgumentB J'essaie d'obtenir : "\\ UNCPATH1 \ Directory \ application.exe" argumentA ArgumentB dans le champ cible du raccourci créé. S'il y a un espace dans le chemin UNC, le code affiché ajoutera les guillemets autour du chemin d'application cible. si pas d'espace, pas de guillemets. – thatotheritguy