Comment puis-je passer les indicateurs d'option de Dossier.CopyHere dans PowerShell?
Je suis en train d'écrire un script automatiquement et silencieusement se déplace un tas de polices dans le Les polices d'un dossier spécial de sorte qu'ils sont disponibles, comme si vous aviez "installé" à partir de l'Explorateur (par glisser-déposer, copier, ou clic-droit et choisir "Install"). J'ai le Shell.Application
partie vers le bas tout le chemin à la copie.
$FONTS = 0x14
$shell = New-Object -ComObject Shell.Application
$source = $shell.Namespace($downloaded_path)
$target = $shell.Namespace($FONTS)
$target.CopyHere($source.Items())
Cependant, certains systèmes peuvent déjà avoir les polices installées et je veux la boîte de dialogue de progression pour être caché, et invite à être accepté en silence.
Donc, je suis de l'enquête de la Dossier.CopyHere
indicateurs d'option.
4
Ne pas afficher une boîte de dialogue de progression16
Répondre par "Oui pour Tous" pour toute boîte de dialogue qui s'affiche.
J'espère qu'ils sont pris en charge dans ce dossier (certaines options sont ignorées par la conception). Et je pense que ce sont en décimal, droit? - Ils doivent être convertis? Cependant je passe, je vois encore les deux boîtes de dialogue. J'ai essayé
$options = 4 <-- don't expect int to work
$options = 0x4 <-- thought hexidecimal would be ok, the VB documentation shows &H4&
$options = "4" <-- string's the thing?
$options = [byte]4 <-- no luck with bytes
$options = [variant]4 <-- this isn't even a type accelerator!
Et, si je peux obtenir une option de travail, comment puis-je obtenir à la fois le travail? Dois-je bor
ensemble? Que dire de la mise en forme?
$options = 4 -bor 16
Ou puis-je les ajouter ou de les convertir en hexadécimal?
$options = "{0:X}" -f (4 + 16)
OriginalL'auteur Anthony Mastrean | 2012-08-28
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
4 -bor 16
. Il est difficile de dire ce que cette méthode attend depuis l'est de type VARIANT. J'ai pensé qu'il serait prendre une valeur entière. Si cela ne fonctionne pas, ce commentaire du Rubrique MSDN sur Dossier.CopyHere implique qu'une chaîne de travail:Bien que je me demande si la chaîne de format doit être
"0x{0:x}"
?Juste être conscient que pour la normale .NET drapeaux style enums, vous pouvez passer plusieurs drapeaux aux une .NET (ou paramètre de commande) qui est fortement typé enum comme suit:
Oisin a écrit quelques infos sur ce sujet dans ce post de blog.
$options = "0x{0:X}" -f (4 -bor 16)
et toutes les autres combinaisons d'un seul ou de plusieurs indicateurs. Pas de chance, même les dialogues.Peut-être que vous ignorez les Options et vérifier pour voir si la police existe et seulement d'invoquer CopyHere si la police n'existe pas. Regardez la réponse de Jason Ladwig rend 8 juin 2012 a écrit: social.technet.microsoft.com/Forums/en-US/winserverpowershell/...
Pour info, il y a des gens qui prétendent que le paramètre Options est sans valeur. 🙂 mattclingan.wordpress.com/2007/08/08/...
L'avertissement est clair sur MSDN page: Remarque: Dans certains cas, comme compressé (.zip) des fichiers, certains indicateurs d'option peut être ignoré par la conception. msdn.microsoft.com/en-us/library/ms630707.aspx
OriginalL'auteur Keith Hill
J'ai eu le même problème et trouvé ça dans un autre fil, a Fonctionné parfaitement pour moi.
Si vous voulez écraser, ET le silence changement 0x10 à 0x14 (docs).
OriginalL'auteur user714429
La
Folder.CopyHere
indicateurs d'option peut simplement pas de travail. Cela me rend triste. Je vais avoir à enquêter sur l'une de ces méthodes, ce qui laisse m'en un peu coincée.Processus Distinct
Invoquer le copier dans un nouveau processus et masquer la fenêtre à l'aide de la
ProcessStartInfo
propriétés. Je n'ai pas encore mis en œuvre cette encore, mais je me demande si elle va de l'adresse de l'utilisateur d'une demande d'écraser des fichiers existants?Pour La Boucle
Seulement copie des éléments non existants. Cela semble tomber quand je veux mettre à jour une police avec un nouveau fichier de police du même nom.
Supprimer Les
Je suis en train de penser de la suppression de toutes les polices du même nom que ceux que je suis la copie, la copie de l'ensemble. Même si c'est un peu brutal. Et je crois qu'il y a un autre invite si la police ne peut pas être supprimé car il est en cours d'utilisation. soupir
Il y a un script personnalisé, publié en 2010 par un senior consultant Microsoft qui semble fonctionner à l'aide de quelques personnalisé .NET code?! blogs.technet.microsoft.com/deploymentguys/2010/12/04/...
OriginalL'auteur Anthony Mastrean
La copie drapeaux ne fonctionne pas pour moi. - Je configurer un emploi dans l'installation des polices de script qui détecte les "Installation des Polices" de la fenêtre et envoyer
{Enter}
, donc je ne suis pas d'écraser des polices existantes.Après toutes les polices de caractères sont copiés/installé... j'ai supprimer le travail, par son nom.
Qui fonctionne pour moi sur Windows 7, 8.x, & 10.
OriginalL'auteur ubie
J'en vois un certain nombre de Décompresser le dossier des opérations, mais pas vraiment d'une écriture d'une solution pour le dossier Fonts de la situation. J'ai donc écrit mon propre! Il s'avère que le dossier Polices ne mettre en œuvre la Coquille.Dossier.CopyHere méthode, mais ne prend pas en compte les surcharges dépassé pour la deuxième argument de la méthode. Pourquoi? Qui sait! Je soupçonne Raymond Chen de "Le Vieux Chose de nouveau' Windows Développeur blog pourrait l'expliquer, mais je ne sais pas la réponse. Nous avons donc besoin de place intelligemment nos polices avant d'essayer de les copier, ou nous allons obtenir un message méchant.
Dans mon code, nous vérifions pour voir une police existe ou non en cochant pour un match sur les quatre premiers caractères du nom de la police avec une recherche de génériques. Si la police n'existe pas, nous supposons que c'est la première fois que nous faisons l'installation des polices sur ce système et de définir un indicateur spécial appelé $FirstInstall.
Dans le script, si $FirstInstall est vrai, nous installer toutes les polices dans le source de répertoire de police. Sur les exécutions suivantes, nous vérifions pour voir si chaque police est un match, et si oui, de nous abandonner cette copie. Si non, nous devons aller de l'avant et de copie. Cela semble fonctionner pour la plupart de mes clients, jusqu'à présent.
Ici vous allez!
OriginalL'auteur FoxDeploy
Vous pouvez simplement prendre une somme de vos options. J'étais besoin d'exécuter CopyHere avec deux options - SILENCIEUX et NOCONFIRMATION. Regardez les exemples ci-dessous:
OriginalL'auteur kirill.buga
Je viens de recevoir cela fonctionne simplement à l'aide de + c'est à dire
OriginalL'auteur iamkrillin