Search code examples
powershellcredentials

Start powershell script with credentials of other user isn't working


I try to run script with higher permissions using -credential argument When I try to do it using this part of code it shows that error which basically means that The name of the directory is incorrect. Both script (that one that contain start-process and the change_permissions.ps1 are in the same folder which is \\srv1\Projekty\nowy_folder.

Without -credential argument script works completely fine.

Here's whole script:

#gui
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$form_start = New-Object System.Windows.Forms.Form
$form_start.Text = 'Tworzenie projektu'
$form_start.Size = New-Object System.Drawing.Size(340,175)
$form_start.StartPosition = 'CenterScreen'

$permission_button = New-Object System.Windows.Forms.Button
$permission_button.Location = New-Object System.Drawing.Point(95,25)
$permission_button.Size = New-Object System.Drawing.Size(135,23)
$permission_button.Text = 'Przydziel uprawnienia'
$permission_button.add_Click({
    $username = "DOMAIN\USER"

    $password = "PASSWORD"
    
    $credentials = New-Object System.Management.Automation.PSCredential -ArgumentList @($username,(ConvertTo-SecureString -String $password -AsPlainText -Force))
   # Invoke-Command -FilePath "\\srv1\nowy_folder\change_permissions.ps1" -Credential $credentials
    Start-Process powershell -argumentlist '.\change_permissions.ps1' -workingdirectory "S:" #-Credential ($credentials) 

    # Using UNC instead of .\change_permissions.ps1 isn't working

})
$form_start.Controls.Add($permission_button)

#Code below is basically the same but runs other script which also isn't running properly

$create_folders_button = New-Object System.Windows.Forms.Button 
$create_folders_button.Location = New-Object System.Drawing.Point(110,75)
$create_folders_button.Size = New-Object System.Drawing.Size(100,23)
$create_folders_button.Text = 'Utwórz katalogi'
$create_folders_button.add_Click({
    $username = "DOMAIN\USER"

    $password = "PASSWORD"
    
    $credentials = New-Object System.Management.Automation.PSCredential -ArgumentList @($username,(ConvertTo-SecureString -String $password -AsPlainText -Force))
    
    Start-Process powershell -argument "C:\Projekty\nowy_folder\make_project_folder_with_subfolders.ps1" -Credential ($credentials) 
    # $form_start.close()
})
$form_start.Controls.Add($create_folders_button)

$form_start.Topmost = $true
$form_start.ShowDialog()

As you may noticed I tried the invoke-command as well. While using the invoke-command another error shows up: enter image description here

Do you have any solution to my problem?


Solution

  • Regarding such approach

    Invoke-Command -FilePath c:\scripts\test.ps1 -ComputerName Server01
    

    The FilePath parameter specifies a script that is located on the local computer. The script runs on the remote computer and the results are returned to the local computer.

    if your file is locally saved, then you can try:

    Invoke-Command -FilePath $localPath -computername srv1 -Credential $credentials
    

    or you can use full path with such approach:

    Invoke-Command -computername srv1 -scriptblock { \\srv1\nowy_folder\change_permissions.ps1} -Credential $credentials
    

    or you can use direct path

     Invoke-Command -computername srv1 -scriptblock { c:\scripts\change_permissions.ps1} -Credential $credentials