1 votes

Fichier batch avec citations de commandes Powershell

J'ai créé un script pour modifier mon IP adresse/masque et VLAN ID d'une interface, mais le problème est que, pour modifier la VLAN ID J'ai besoin d'exécuter un PowerShell commande. Ma variable contenant le nom de l'interface contient un espace, je dois donc la mettre entre guillemets. Le problème est que je dois insérer deux variables pour la même interfaceName une avec des guillemets simples pour la commande Powershell et une autre pour la commande batch netsh sinon, je reçois une erreur. Voici mon fichier batch :

:: Configuration Variables
set ifName='Ethernet 2'
set connectionName="Ethernet 2"
set ipAddress=10.88.167.27
set subnetMask=255.255.255.240
set vlanID=100

:: set defaultGateway=x.x.x.x
:: set primaryDNS=x.x.x.x
:: set alternateDNS=x.x.x.x

:: Change of IP address and NetMask ::
netsh interface ipv4 set address name=%connectionName% source=static addr=%ipAddress% mask=%subnetMask%

:: Change VLAN ID ::
powershell -Command "& {Set-NetAdapter -Name %ifName% -VlanID %vlanID% -Confirm:$false}"
echo The VLAN ID of %ifName% has been successfully changed to %vlanID%

pause > null

Mon script batch script fonctionne bien mais je veux avoir une seule variable pour le nom de l'interface, au lieu de deux. Mon problème est le suivant :

Si j'utilise ifName dans la commande de changement d'adresse IP, j'obtiens l'erreur suivante : The filename, directory name, or volume label syntax is incorrect. .

Si j'utilise le connectionName pour la commande PowerShell avec des guillemets doubles, j'ai obtenu l'erreur suivante :

Set-NetAdapter : A positional parameter cannot be found that accepts argument '2'.
At line:1 char:4
+ & {Set-NetAdapter -Name Ethernet 2 -VlanID 100 -Confirm:$false}
+    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Set-NetAdapter], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Set-NetAdapter

J'ai même essayé de mettre la commande Powershell entre guillemets simples et de l'utiliser à l'intérieur de connectionName comme ceci :

powershell -Command '& {Set-NetAdapter -Name %connectionName% -VlanID %vlanID% -Confirm:$false}'

mais le VLAN de l'interface réseau reste le même.

3voto

JosefZ Points 11907

Définir les variables en utilisant set "varname=varvalue" et le modèle syntaxique les mettre entre guillemets si nécessaire como echo "%varname%" . Ensuite, votre extrait de code devrait être le suivant :

:: Configuration Variables
set "ifName=Ethernet 2"
set "connectionName=Ethernet 2"
set "ipAddress=10.88.167.27"
set "subnetMask=255.255.255.240"
set "vlanID=100"

:: Change of IP address and NetMask ::
netsh interface ipv4 set address name="%connectionName%" source=static addr=%ipAddress% mask=%subnetMask%

:: Change VLAN ID :: needs some tricky escaping

powershell -Command "& {Set-NetAdapter -Name """"'%connectionName%'"""" -VlanID %vlanID% -Confirm:$false}"
echo The VLAN ID of %ifName% has been successfully changed to %vlanID%

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X