1
votes

Installez un fichier .MSI à partir du même répertoire que le script PowerShell sans définir de chemin de fichier statique

J'ai un script que nous utilisons qui est dans Powershell mais j'ai besoin du script pour pouvoir trouver les fichiers dont il a besoin pour installer une application de manière dynamique, car les utilisateurs peuvent copier le dossier dans n'importe quel dossier de leur ordinateur. Actuellement, j'ai le jeu de codes ci-dessous, je suppose que ma question est de savoir si le script est dans le même dossier que les fichiers d'installation. Comment dire à PowerShell de regarder simplement dans le répertoire à partir duquel il est exécuté pour les fichiers d'installation?

$Install = "C:\Other Folder\File.msi"
$InstallArg = "/quite /norestart"
     Start-Process '
     -FilePath $Install '
     -ArgumentList $InstallArg '
     -PassThru | Wait-Process

Toute aide serait appréciée. Merci.

Mise à jour, j'ai trouvé que je dois être dans le répertoire dans lequel se trouve le script. Cependant, comme nous devons exécuter ISE avec les informations d'identification d'administrateur, il est automatiquement par défaut C: \ Windows \ System32 comme répertoire PowerShell cherche peu importe si je lui dis d'ouvrir le script. Si tel est le cas, comment puis-je lui dire de regarder où se trouve le script pour qu'il puisse trouver les fichiers dont il a besoin?


0 commentaires

3 Réponses :


0
votes

Définissez un chemin relatif:

$Install = Join-Path -Path $PSScriptRoot -ChildPath "File.msi"

Si vous n'exécutez pas le script dans le répertoire, où le script lui-même et l'exécutable sont stockés, vous devrez déterminer le chemin absolu vers celui-ci . Avec PowerShell 3+, vous pouvez facilement déterminer le répertoire dans lequel votre script est stocké, à l'aide de la variable $ PSScriptRoot . Vous pouvez définir votre variable $ Install comme ceci:

$Install = ".\File.msi"


3 commentaires

J'ai essayé cela et j'obtiens une erreur indiquant que le fichier est introuvable.


J'ai mis à jour ma réponse pour le cas, que vous exécutez votre script dans n'importe quel répertoire de travail que vous voulez.


Oh ok, cela a beaucoup plus de sens de le faire de cette manière, notre problème est que nous avons une équipe de service desk qui doit ouvrir PowerShell ISE en tant qu'administrateur en utilisant différentes informations d'identification, donc Powershell utilise par défaut C: \ WIndows \ System32, c'est pourquoi je obtenait l'erreur avant. Je vais essayer de cette façon et rendre compte de mes découvertes! Merci!



0
votes

J'ai trouvé ma réponse ci-dessous: comment je l'ai fait fonctionner avec notre situation actuelle. Merci Thomas pour l'aide!

$ScriptLocation = Get-ChildItem -Path C:\Users -Filter Untitled2.ps1 -Recurse | Select Directory
cd $ScriptLocation.Directory
$Install = ".\Install.msi"
$InstallArg = "/quite /norestart"
Start-Process '
-FilePath $Install '
-ArgumentList $InstallArg '
-PassThru | Wait-Process


1 commentaires

Cela peut fonctionner dans certaines circonstances. Il échouera, après que votre script a été renommé, ou s'il n'est pas stocké quelque part sous C: \ Users ou s'il y a plus d'un fichier appelé Untitled2.ps1 . Dans l'ensemble, c'est assez dangereux. J'ai mis à jour ma réponse à votre problème, vous voudrez peut-être préférer cette façon.



0
votes

Merci beaucoup pour votre aide à tous! Je suis tombé par hasard sur la solution parfaite.

# Set active path to script-location:
$path = $MyInvocation.MyCommand.Path
if (!$path) {
    $path = $psISE.CurrentFile.Fullpath
}
if ($path) {
    $path = Split-Path $path -Parent
}
Set-Location $path


0 commentaires