2015-06-11 4 views
11

मैं दूरस्थ डेस्कटॉप को किसी दिए गए मशीन में चला सकता हूं और प्रमाणीकरण जानकारी दिए बिना svn चला सकता हूं, और यह काम करता है; मेरा एडी प्रमाणीकरण मुझे इच्छित भंडार तक पहुंचने की अनुमति देता है।पावरहेल, एसवीएन, और प्रमाणीकरण

मैं मशीन से कनेक्ट करने और svn कमांड निष्पादित करने के लिए पावरहेल का उपयोग कर सकता हूं। हालांकि, जब मैं करता हूं, तो मुझे "वर्जित वर्जित" मिलता है। [Environment]::UserName उपयोगकर्ता द्वारा अपेक्षित उपयोगकर्ता नाम (मेरा विज्ञापन उपयोगकर्ता नाम) के साथ प्रकट होता है जब दूरस्थ रूप से निष्पादित किया जा रहा स्क्रिप्ट से चलाया जाता है।

मुझे यह काम करने के लिए क्या याद आ रही है?

कुछ कोड:

Param(
    [string]$branchURL 
) 

की तरह कॉल की एक श्रृंखला:

If(Test-Path "C:\webfiles\repositoryname") { 
    Write-Host "Switching repositoryname" 
    SwitchRepo "repositoryname" ($branchURL) "C:\webfiles\repositoryname"; 
} 

जो फोन:

$Session = New-PSSession -ComputerName $computerName; 

if (-Not ($Session)) { 
    Write-Host "Did not create session!"; 
    Return; 
} 

Invoke-Command -Session $Session -FilePath 'switchAllRepositories.ps1' -ArgumentList $branchName; 

Remove-PSSession $Session; 

और switchAllRepositories में, मैं एक पैरामीटर

Function SwitchRepo ($repoName, $branchPath, $workingCopy) 
{ 
    $to = ("https://[url]/svn/" + $repoName + $branchPath); 
    Write-Host "to $to"; 

    #debug 
    $user = [Environment]::UserName 
    Write-Host "as $user"; 

    $exe = "C:\Program Files\TortoiseSVN\bin\svn.exe"; 
    &$exe switch "$to" "$WorkingCopy" --username [redacted] --password [redacted] --no-auth-cache --non-interactive --trust-server-cert 

    if ($process.ExitCode -ne 0) { 
     #$wshell = New-Object -ComObject Wscript.Shell 
     #$wshell.Popup("Error switching " + $repoName,0,"Done",0x1) 
     Write-Host "Error detected!" 
    } 
} 

सटीक त्रुटि है:

SVN: E175013: यूआरएल पर भंडार से जुड़ने में असमर्थ '[कतरना]' + CategoryInfo: NotSpecified: (SVN: E175013: यू ... आसान बनाता है/20150620 ': स्ट्रिंग) [], RemoteException + FullyQualifiedErrorId: NativeCommandError SVN: E175013: तक पहुंच' [कतरना] 'मना

+1

आप कैसे कनेक्ट पर निर्भर करता है। –

+0

@ MathiasR.Jessen आपको क्या जानने की आवश्यकता है? मैं एक दूरस्थ सत्र बना रहा हूं और सत्र का उपयोग कर एक स्क्रिप्ट का आह्वान कर रहा हूं। – Yamikuronue

+0

'switchAllRepositories का हिस्सा दिखाएं।ps1' जहां यह पैरामीटर स्वीकार करता है (जब आप इसे 'Invoke-Command' के साथ कहते हैं तो आप एक शाखा नाम को तर्क के रूप में भेज रहे हैं), यह मुझे लगता है कि ps1 के शीर्ष पर एक param block होना चाहिए। – briantist

उत्तर

4

यह कोड का उपयोग कर रहे देखने के लिए मदद मिलेगी, लेकिन अगर यह है कि मैं क्या संदिग्ध तो आप PowerShell को 0 या तो रीमोटिंग का उपयोग कर रहे हैंया Invoke-Command

चूंकि वे केर्बेरो प्रमाणीकरण का उपयोग करने के लिए डिफ़ॉल्ट होंगे, और एसवीएन सर्वर शायद तीसरी मशीन पर है, तो आप शायद केर्बेरोज डबल-हॉप प्रमाणीकरण समस्या में भाग ले रहे हैं।

बस शब्दों में कहें, आप मशीन ए से मशीन बी में रिमोट नहीं कर सकते हैं, फिर उस सत्र के भीतर से उसी प्रमाणीकरण संदर्भ का उपयोग कर मशीन सी तक पहुंचने का प्रयास करें।

आप इसे कुछ तरीकों से काम करने में सक्षम हो सकते हैं: CredSSP अक्सर इन में लाया जाता है लेकिन मुझे लगता है कि यह जटिल है और आमतौर पर वर्कफ़्लो की पुन: सोच बेहतर हो जाती है।

तो उदाहरण के लिए, आप स्पष्ट रूप से एसवीएन कमांड के लिए प्रमाण-पत्र निर्दिष्ट करने में सक्षम हो सकते हैं।

या, आप सर्वर पर अपना स्वयं का एंडपॉइंट बना सकते हैं जो रनएस उपयोगकर्ता का उपयोग करता है। तब सभी आदेशों एक विशिष्ट उपयोगकर्ता के रूप में मशीन बी से हो जाएगा:

+0

ऐसा लगता है कि मैं क्या खो रहा हूं :) लेकिन फिर, जब मैंने अपनी स्क्रिप्ट में उपयोगकर्ता नाम और पासवर्ड को हार्डकोड करने का प्रयास किया, तो क्या यह काम नहीं करता? एसवीएन के बारे में शायद कुछ प्रदान किए गए प्रमाण-पत्रों या कुछ ऐसे पर केर्बेरो को पसंद करने की कोशिश कर रहा है। – Yamikuronue

+0

क्या आप कोड शामिल करने के लिए अपना प्रश्न संपादित कर सकते हैं? – briantist

+0

सुनिश्चित नहीं है कि आप कौन सी लाइनें चाहते हैं लेकिन मैंने कुछ कोड में संपादित किया है। – Yamikuronue